[nats] JetStream

[์›๋ณธ ๋งํฌ]

nats JetStream์€ nats์˜ ๊ณต์‹ ํ™•์žฅ ์‹œ์Šคํ…œ์ด๋‹ค.

์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด on-disk๋กœ ์ €์žฅ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๊ณ , FIFO ๊ธฐ๋ฐ˜์˜ ๋ฉ”์„ธ์ง• ์ฒ˜๋ฆฌ ๋“ฑ Kafka์™€ ๋™๋“ฑํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Streams - NATS Docs




JetStream ํ™œ์„ฑํ™”ํ•˜๊ธฐ

๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด JetStream์€ ๊บผ์ ธ์žˆ๋‹ค. ์“ฐ๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ์ผœ์ค˜์•ผ ํ•œ๋‹ค.

์ผœ์ ธ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” account info ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

nats account info

์ด๋ ‡๊ฒŒ ๋ผ์žˆ๋‹ค๋ฉด,

๊ธฐ์กด์˜ nats-server๋ฅผ ์ฃฝ์ธ๋‹ค์Œ์— -js ์˜ต์…˜์„ ์ค˜์„œ jetstream ๋ชจ๋“œ๋กœ ์žฌ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜

nats-server -js

๊ณต์‹ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋งจ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€ ๋ช…๋ นํ–‰ ์ธ์ž -js๋ฅผ ๋˜์ ธ์ฃผ๋ฉด ๋œ๋‹ค.

docker run -idt --name nats --network nats --rm -p 4222:4222 -p 8222:8222 nats:2.9.15-alpine3.17 --http_port 8222

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ, ์ด๋Ÿฐ์‹์œผ๋กœ JetStream account ์ •๋ณด๊ฐ€ ์กฐํšŒ๋˜๋ฉด, ์ž˜ ๋œ ๊ฒƒ์ด๋‹ค.




์ŠคํŠธ๋ฆผ ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ์—๋Š” ์ŠคํŠธ๋ฆผ์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ๋‹ค.
์ŠคํŠธ๋ฆผ์€ ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ํ ๋‹จ์œ„๋‹ค. ์—ฌ๊ธฐ์—๋‹ค ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์œผ๋ฉด ์ปจ์Šˆ๋จธ๊ฐ€ ๊บผ๋‚ด์“ฐ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค.

stream add ๋ช…๋ น์„ ์น˜๊ณ , ์˜ต์…˜์„ ๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ณจ๋ผ์ค€๋‹ค.

nats --server nats://localhost:4222 stream add test_stream

์ผ๋ฐ˜์ ์ธ ์นดํ”„์นด์ฒ˜๋Ÿผ FIFO ํ๋กœ ์“ฐ๊ณ ์‹ถ๋‹ค๋ฉด, ๊ทธ๋ƒฅ ๋‹ค ๋””ํดํŠธ ์˜ต์…˜๋งŒ ์ค˜๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

nats --server nats://localhost:4222 stream info test_stream




consumer ๋งŒ๋“ค๊ธฐ

stream๋งŒ ์žˆ์–ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š”๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
consumer๋Š” stream์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ด consumer ๋‹จ์œ„๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ์€ ๊ฒƒ๊ณผ ์ฝ์ง€ ์•Š์€ ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒƒ๋„ stream์ฒ˜๋Ÿผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

nats consumer add




๋ฉ”์„ธ์ง€ ์ฃผ๊ณ ๋ฐ›๊ธฐ

stream๋„ consumer๋„ ๋‹ค ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ํ•œ๋ฒˆ ํ•‘ํ์„ ํ•ด๋ณด์ž.
๋ฉ”์„ธ์ง€๋ฅผ ๋˜์ง€๋Š”๊ฑด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

nats pub [subject] [๋ฉ”์„ธ์ง€]
nats pub test "test 1"
nats pub test "test 4"
nats pub test "test 3"
nats pub test "test 2"

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ consumer๋ฅผ ํ†ตํ•ด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

nats consumer next [stream] [consumer] --count [๊ฐ€์ ธ์˜ฌ๊ฐœ์ˆ˜]
nats consumer next test_stream test_consumer --count 1000

Discard Policy๊ฐ€ Old(FIFO)์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜๋‚˜์”ฉ ์ฝ์–ด์™€๋„ ๋จผ์ € ์Œ“์ธ๊ฒƒ์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜จ๋‹ค.

๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
JetStream Walkthrough - NATS Docs
Streams - NATS Docs
์†Œ๋น„์ž - NATS Docs