- Kafka Streams๋ ํ๋ก๋์๊ฐ ํ ํฝ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋ฉด, ํด๋น ํ ํฝ์ ๊ตฌ๋ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฝ๊ณ , ์ฒ๋ฆฌ(๊ฐ๊ณต/์ง๊ณ/๊ฐํ)ํ ํ, ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํ ํฝ์ผ๋ก ๋ค์ ์ฐ๋ '์ฝ๊ธฐ-์ฒ๋ฆฌ-์ฐ๊ธฐ'์ ๊ธฐ๋ณธ ํ๋ฆ์ ๋ฐ๋ฅธ๋ค. ๐
- ์ค์๊ฐ ์ฌ๊ธฐ ํ์ง ์์คํ ์ Kafka Streams์ ํต์ฌ ํ์ฉ ์ฌ๋ก ์ค ํ๋๋ก, ํน์ ์๊ณ๊ฐ(์: 10,000)์ ์ด๊ณผํ๋ ๊ฑฐ๋๋ฅผ ํํฐ๋งํ์ฌ ์์ฌ์ค๋ฌ์ด ๊ฑฐ๋๋ก ๋ถ๋ฅํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํค๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค. ๐จ
- Spring Boot์ Kafka Streams๋ฅผ ํตํฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ, ํ์ํ ์์กด์ฑ์ผ๋ก๋
spring-boot-starter-web,lombok,spring-kafka,spring-kafka-streams๊ฐ ์๋ค. ๐ ๏ธ - Kafka Streams ์ ํ๋ฆฌ์ผ์ด์
์
application.id์ค์ ๊ณผ ๊ธฐ๋ณธ ์ง๋ ฌํ/์ญ์ง๋ ฌํ(์:StringSerializer) ๊ตฌ์ฑ์ ํตํด ์ด๊ธฐํ๋๋ฉฐ, ํฅํ ์ฌ์ฉ์ ์ ์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ ์ง์ํ๋ค. โ๏ธ - ์ฌ๊ธฐ ํ์ง ๋ก์ง์
StreamsBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ํ ํฝ(transactions)์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ,filter์ฐ์ฐ์ ํตํด ํน์ ์กฐ๊ฑด(์: ๊ฑฐ๋ ๊ธ์ก > 10,000)์ ๋ง์กฑํ๋ ์ด๋ฒคํธ๋ฅผ ๊ฑธ๋ฌ๋ธ ํ, ์ด๋ฅผ ์ถ๋ ฅ ํ ํฝ(fraud-alerts)์ผ๋ก ๋ค์ ์ฐ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค. ๐ธ ObjectMapper๋ฅผ ํ์ฉํ์ฌ Kafka ๋ฉ์์ง(JSON ๋ฌธ์์ด)๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ , ๊ฐ์ฒด์ ์์ฑ(์:amount)์ ๊ธฐ๋ฐ์ผ๋ก ํํฐ๋ง ์กฐ๊ฑด์ ์ ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ค. ๐- Kafka Streams๋ ๋จ์ํ '์ฝ๊ธฐ-์ฐ๊ธฐ'๋ฅผ ๋์ด, ์ํ ์ ์ฅ(stateful), ํ์ฅ์ฑ(scalable), ๋ด๊ฒฐํจ์ฑ(fault-tolerant) ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ ์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ค์ฌ์ฃผ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ด๋ ์ผ๋ฐ Kafka Consumer๋ก๋ ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ๋ถ๋ถ์ด๋ค. โจ
- ๋ฐ๋ชจ์์๋ 50๊ฐ์ ๊ฑฐ๋ ์ด๋ฒคํธ ์ค 18๊ฐ๊ฐ ์ฌ๊ธฐ์ฑ ๊ฑฐ๋๋ก ํ์ง๋์ด
fraud-alertsํ ํฝ์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ์ ์ก๋์์ผ๋ฉฐ, ์ด๋ Kafka Streams๊ฐ ์ค์๊ฐ ๋ฐ์ดํฐ ํํฐ๋ง์ ํจ๊ณผ์ ์ผ๋ก ์ํํจ์ ๋ณด์ฌ์ค๋ค. โ - Kafka Streams๋ ๋ด๋ถ์ ์ผ๋ก RocksDB๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์ ์งํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ "rebalancing to running"๊ณผ ๊ฐ์ ์ํ ์ ํ์ ํตํด ๋ด๋ถ ๋์์ ํ์ธํ ์ ์๋ค. ๐๏ธ
NewTopic๋น์ ์ฌ์ฉํ์ฌ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ Kafka ํ ํฝ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์์ฑํ ์ ์์ด, ์๋ ํ ํฝ ์์ฑ์ ๋ฒ๊ฑฐ๋ก์์ ์ค์ฌ์ค๋ค. โ





