Skip to main content

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>

StreamConsumer를 생성할 때, .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: 가능한 빠른 속도로 replay
    • original: 원래 메시지를 받은 속도로 replay