NATS CRD
warning
Stream, Consumer, Account의 name은 파일 경로로 사용되기 때문에 [a-z0-9]*
32자 이하로 만드는 것이 좋습니다. 버전 업데이트에 따라 이 제약사항이 사라질 수 있다고 합니다.
Account
kubectl explain account.spec
apiVersion: jetstream.nats.io/v1beta2
kind: Account
metadata:
name: <name>
namespace: event
spec:
name: <accountName>
servers:
- nats://<host>:<port>
- nats://<user>:<password>@<host>:<port>
Stream
과 Consumer
를 생성할 때, .spec.account
를 설정하면 해당 Account 정보에 부합하는 NATS 서버에만 생성됩니다.
Stream
kubectl explain streams.spec
apiVersion: jetstream.nats.io/v1beta2
kind: Stream
metadata:
name: <name>
namespace: event
spec:
name: <streamName>
subjects: # 이 Stream이 consume하는 subjects
- <subject>
storage: file # memory | file
replicas: 3 # 1, 3, 5 로 설정
# noAck: false
retention: limits # limits | interest | workqueue
discard: old # old | new
# limits
maxAge: "336h" # 00h00m00s | "", 메시지 최대 보관 기간
# maxMsgs: -1 # 최대 저장 메시지 수
# maxBytes: -1 # 최대 저장 용량
# maxMsgSize: -1 # 메시지 하나의 최대 크기, default: 1 MB
# account: <accountName>
retention
: 수정불가limits
: max 옵션에 의해 정해진 값을 넘어간 메시지가 있을 때,discard
옵션에 따라 삭제합 니다- 다른 옵션으로 설정하더라도 항상 적용되는 제한입니다
interest
: 현재 정의된 Consumer가 모두 메시지를 받고 Ack를 보냈을 때 삭제합니다workqueue
: 한 Consumer가 메시지를 받고 Ack를 보냈을 때 삭제합니다- 한 Stream에 동일한 subject를 갖는 Consumer를 정의할 수 없습니다
discard
:old
: 가장 오래된 메시지를 삭제합니다new
: 새로 들어오는 메시지를 거부합니다
Consumer
kubectl explain consumer.spec
apiVersion: jetstream.nats.io/v1beta2
kind: Consumer
metadata:
name: <name>
namespace: event
spec:
streamName: <streamName>
durableName: <consumerName>
deliverPolicy: all # all | last | new | byStartSequence | byStartTime
# optStartSeq: 0
# optStartTime: "2022-07-05T01:32:00+09:00"
ackPolicy: explicit # none | all | explicit
ackWait: 10m
maxAckPending: 100
maxDeliver: 3
# account: <accountName>
########
# pull #
########
maxWaiting: 512 # pull 응답을 받기 위해 대기하고 있는 최대 요청 수
########
# push #
########
# 클라이언트가 deliverSubject를 subscribe하면 서버가 메시지를 push
deliverSubject: <deliverSubject>
# deliverGroup: <queueGroup>
rateLimitBps: -1
info
Pull Consumer는 deliverGroup: <queueGroup>
과 ackPolicy: explicit
을 설정한 Push Consumer와 기능적으로 동일합니다.
filterSubject
: stream의 subject를 필터링할 수 있습니다.- Ack 정책
ackPolicy
: 수정불가none
all
: 중간에 한 번이라도 Ack 응답을 받으면 이전에 받은 메시지는 Ack를 받은 것으로 간주explicit
: 모든 메시지에 Ack 응답(Pull에서만 사용 가능)
maxAckPending
: Ack 정책을 사용할 때, 클라이언트가 메시지를 가져간 후 Ack를 보내지 않은 메시지 수가 이 값을 넘어가면 일시 중지됩니다.ackWait
:00h00m00s
Ack 정책을 사용할 때, 클라이언트가 메시지를 가져간 후ackWait
시간 이내에 Ack를 보내지 않으면 메시지가 재전송 됩니다.maxDeliver
: Ack 정책으로 인해 재전송 될 때, 최대 재시도 횟수
deliverPolicy
: 수정불가, Consumer를 '생성'했을 때 시작 위치all
: 가장 첫 번째 메시지부터 가져감last
: 가장 마지막 메시지부터 가져감new
: 새로 들어오는 메시지부터 가져감byStartSequence
:optStartSeq
에 설정된 메시지부터 가져감byStartTime
:optStartTime
에 설정된 시간 이후 메시지부터 가져감
replayPolicy
: 수정불가, deliverPolicy에 따라 이전 메시지부터 메시지를 replay할 때, 원래 메시지를 받은 속도로 할지 아니면 가능한 빠른 속도로 할지 결정instant
: 가능한 빠른 속도로 replayoriginal
: 원래 메시지를 받은 속도로 replay