There are only two hard problems in distributed systems :

  1. Guaranteed order of messages
  2. Exactly-once delivery

Kafka Streams

<aside> ๐ŸŒŠ ์นดํ”„์นด ํ† ํ”ฝ์— ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹ค๋ฅธ ํ† ํ”ฝ์— ์ ์žฌํ•˜๋Š” Kafka ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

</aside>

Stateless ์ฒ˜๋ฆฌ : ๋‹ค๋ฅธ ๋ ˆ์ฝ”๋“œ์— ๊ด€๊ณ„์—†์ด ๊ทธ ๋ ˆ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฒ˜๋ฆฌ

Stateful : ์ด์ „ ๋ ˆ์ฝ”๋“œ๋“ค์ด ์˜์‚ฌ๊ฒฐ์ •์— ํ™œ์šฉ๋˜๋Š” ์ฒ˜๋ฆฌ

์žฅ์ ๋“ค

  1. ์นดํ”„์นด์™€์˜ ์™„๋ฒฝํ•œ ํ˜ธํ™˜
  2. Exactly Once ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ
  3. Streams DSL (Domain Specific Language), Processor API ์ œ๊ณต
    1. ๋ฏธ๋ฆฌ ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ์ด์šฉํ•˜์—ฌ topology๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹
    2. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ŠคํŠธ๋ฆผ์ฆˆ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ํŽธํ•จ (์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค๋ฉด map, join, window)
    3. Stream DSL์˜ ๋ ˆ์ฝ”๋“œ ํ๋ฆ„์˜ ์ถ”์ƒํ™” ๊ฐœ๋… 3๊ฐ€์ง€ (KStream, KTable, GlobalKTable)
  4. ์ƒํƒœ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž์ฒด ๋กœ์ปฌ ์ƒํƒœ ์ €์žฅ์†Œ๋กœ RocksDB ์‚ฌ์šฉ. ์ƒํƒœ์— ๋Œ€ํ•œ ๋ณ€ํ™˜ ์ •๋ณด๋Š” kafka changelog ํ† ํ”ฝ์— ์ €์žฅ

Kafka Streams Topology

Untitled

Untitled

Untitled

KStream

KTable