There are only two hard problems in distributed systems :
- Guaranteed order of messages
- Exactly-once delivery
Kafka Streams
<aside>
๐ ์นดํ์นด ํ ํฝ์ ์ ์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณํํ์ฌ ๋ค๋ฅธ ํ ํฝ์ ์ ์ฌํ๋ Kafka ํด๋ผ์ด์ธํธ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
</aside>
Stateless ์ฒ๋ฆฌ : ๋ค๋ฅธ ๋ ์ฝ๋์ ๊ด๊ณ์์ด ๊ทธ ๋ ์ฝ๋๋ง์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ฒ๋ฆฌ
Stateful : ์ด์ ๋ ์ฝ๋๋ค์ด ์์ฌ๊ฒฐ์ ์ ํ์ฉ๋๋ ์ฒ๋ฆฌ
- Stateful ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ํ ์ ์ฅ์(state store) ๊ฐ ํ์ํ๋ฐ, ๋ฎ์ latency๋ฅผ ์ํด์ ๊ฐ ์ฒ๋ฆฌ ๋
ธ๋์ ๋ก์ปฌ์ state store ๋ณด๊ด ์ ์ง.
์ฅ์ ๋ค
- ์นดํ์นด์์ ์๋ฒฝํ ํธํ
- Exactly Once ๋ฅผ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์๋น์ค ๋ก์ง์ ์ง์คํ ์ ์์
- Streams DSL (Domain Specific Language), Processor API ์ ๊ณต
- ๋ฏธ๋ฆฌ ์ ๊ณต๋๋ ํจ์๋ค์ ์ด์ฉํ์ฌ topology๋ฅผ ์ ์ํ๋ ๋ฐฉ์
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์คํธ๋ฆผ์ฆ๋ฅผ ๊ตฌํํ๊ธฐ ํธํจ (์ฝ๊ฒ ๋งํ๋ฉด ์ฃผ๋ก ์ฌ์ฉํ๋ ค๋ ๊ธฐ๋ฅ๋ค์ด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์์. ์๋ฅผ ๋ค๋ฉด map, join, window)
- Stream DSL์ ๋ ์ฝ๋ ํ๋ฆ์ ์ถ์ํ ๊ฐ๋
3๊ฐ์ง (KStream, KTable, GlobalKTable)
- ์ํ ๊ธฐ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์์ฒด ๋ก์ปฌ ์ํ ์ ์ฅ์๋ก RocksDB ์ฌ์ฉ.
์ํ์ ๋ํ ๋ณํ ์ ๋ณด๋ kafka changelog ํ ํฝ์ ์ ์ฅ
Kafka Streams Topology



KStream
- ์ผ๋ฐ์ ์ธ consumer์ ๋น์ทํ๊ฒ ๋ชจ๋ ๋ฐ์ดํฐ ์ถ๋ ฅ
KTable