01. Kafka Streams, ksqlDB

Realtime Event Stream Processing

(์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ)

  • ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

  • ๋Œ€์šฉ๋Ÿ‰ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์–‘ํ•จ

    • ๊ตํ†ต

      • ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์Šน๊ฐ ๋ฐ ์ฐจ๋Ÿ‰์˜ GPS ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ

    • ๊ธˆ์œต

      • ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์†ก๊ธˆ ๋ฐ ๊ฒฐ์žฌ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„

    • ์˜ค๋ฝ

      • ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌด๊ธฐ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„

    • ์˜จ๋ผ์ธ ๋งˆ์ผ“

      • ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฑฐ๋ž˜ ๋ฐ ์žฌ๊ณ  ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌ

  • Realtime Event Stream Processing ์‚ฌ๋ก€

    • ex) ์ƒ์‚ฐ ๋ผ์ธ์—์„œ์˜ ์••๋ ฅ, ์˜จ๋„ ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ๊ฐ’์„ ํ†ตํ•ด ์ด์Šˆ ์ฒดํฌ

Database์— ์ €์žฅ ํ›„ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Kafka์— ์žˆ๋Š” ์›€์ง์ด๋Š” ๋ฐ์ดํ„ฐ(Data in Motion)๋ฅผ ๋ฐ”๋กœ ๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ!

๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Realtime Event Stream Processing ๋ฐฉ๋ฒ•

  • Apache Spark

    • UC๋ฒ„ํด๋ฆฌ๋Œ€ํ•™๊ต์—์„œ ๊ฐœ๋ฐœ(2009, 2010 BSD, 2013 ASF)

    • ๋ฒ”์šฉ์ ์ธ ๋ชฉ์ ์„ ์ง€๋‹Œ ๋ถ„์‚ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ปดํ“จํŒ… ํ”„๋ ˆ์ž„์›Œํฌ

    • MapReduce ํ˜•ํƒœ์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ปดํ“จํŒ… ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋“ฑ์žฅ

    • Spark Cluster๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Cluster Manager์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ์ €์žฅํ•˜๋Š” Distributed Storage System์ด ํ•„์š” - ์‚ฌ์šฉ์ด ์–ด๋ ค์›€

  • Storm

    • 2011๋…„์— ๊ฐœ๋ฐœ๋œ ํ›„ ํŠธ์œ„ํ„ฐ(Twirrer.Inc)์— ์˜ํ•ด ์˜คํ”ˆ์†Œ์Šคํ™”(2014)

    • ์ฃผ๋กœ Clojure ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋ถ„์‚ฐํ˜• ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์‹ฑ ํ”„๋ ˆ์ž„์›Œํฌ

    • ๋ณ„๋„์˜ Storm Cluster๋ฅผ ์„ค์น˜ ๊ตฌ์„ฑ

    • ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์•„ Aggregation, Windows, Water Mark ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๊ธ‰ ๋ถ„์„์— ์ œ์•ฝ

  • Flink

    • ๋ฒ ๋ฅผ๋ฆฐ TU๋Œ€ํ•™๊ต์—์„œ ์‹œ์ž‘(2010,2014 ์˜คํ”ˆ์†Œ์Šคํ™”)

    • ํ†ตํ•ฉ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ๋ฐ Batch ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ

    • Java ๋ฐ Scala๋กœ ์ž‘์„ฑ๋œ ๋ถ„์‚ฐ ์ŠคํŠธ๋ฆฌ๋ฐ Data Flow ์—”์ง„

    • ์‚ฌ์šฉ์ž์˜ Stream Processing Code๋Š” Flink Cluster์—์„œ ํ•˜๋‚˜์˜ Job์œผ๋กœ ๋ฐฐํฌ ๋ฐ ์‹คํ–‰

MapReduce๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž„๊ณผ ๋™์‹œ์— ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ€๋ฅด๋Š” ๋ง๋กœ, ๊ทธ ๊ตฌํ˜„์ฒด๋Š” โ€˜๋ถ„์‚ฐ์ฒ˜๋ฆฌ์—”์ง„โ€™ ์—ญํ• ์„ ํ•˜๋Š” ํ•˜๋‘ก์˜ ์ค‘์‹ฌ ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์œผ๋กœ์จ ํ‚ค-๊ฐ’ ์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๊ทธ ํƒ€์ž…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋งต๊ณผ ๋ฆฌ๋“€์Šค ํ•จ์ˆ˜๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค Map : ํฉ์–ด์ ธ ์ž‡๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Key, Value์˜ ํ˜•ํƒœ๋กœ ์—ฐ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜๋กœ ๋ฌถ๋Š” ์ž‘์—… Reduce : Mapํ™”ํ•œ ์ž‘์—… ์ค‘ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…

Kafka ์ง„์˜์—์„œ ๋‚˜์˜จ Realtime Event Stream Processing ๋ฐฉ๋ฒ•

Kafka Streams

  • Event Streaming์šฉ Library(Java, Scala)

  • Kafka 0.10.0.0์— ์ฒ˜์Œ ํฌํ•จ(2016)

  • Framework ๊ฐ€ ์•„๋‹˜ - ๋ณ„๋„์˜ Cluster ๊ตฌ์ถ•์ด ๋ถˆํ•„์š”

  • application.id๋กœ KStreams Application์„ grouping

  • groupBy, count, filter, join, aggregate ๋“ฑ ์†์‰ฌ์šด ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์‹ฑ API ์ œ๊ณต

ksqlDB

  • Event Streaming Database(๋˜๋Š” SQL์—”์ง„) - RDBMS/NoSQL DB๊ฐ€ ์•„๋‹˜

  • Confluent Community License(2017)

  • ๊ฐ„๋‹จํ•œ Cluster ๊ตฌ์ถ• ๋ฐฉ๋ฒ• - ๋™์ผํ•œ ksql.service.id๋กœ ksqlDB๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ธฐ๋™

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Cluster๋Š” ksql.service.id ๊ฐ’์„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

  • SQL๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ksqlDB์— ๋ช…๋ น์–ด๋ฅผ ์ „์†กํ•˜์—ฌ ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์‹ฑ ์ˆ˜ํ–‰

Kafka ๊ธฐ๋ฐ˜ Event Stream Processing ๋ฐฉ์‹

  • Kafka Publish/Subscribe

    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐœ๋ฐœ

  • Kafka Streams

    • ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ

  • ksql DB

    • ์ฟผ๋ฆฌ๋ฌธ์„ ํ†ตํ•œ ๊ฐœ๋ฐœ

SQL ๊ฐœ๋ฐœ vs Java Application ๊ฐœ๋ฐœ

  • ksqlDB

    • SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ Apache Kafka ์ŠคํŠธ๋ฆฌ๋ฐ DB(SQL์—”์ง„)

  • Kafka Streams

    • Java ๋ฐ Scala๋กœ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ Apache Kafka Streams ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Kafka์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ตฌ์กฐ

Broker์™€ ๋ณ„๊ฐœ(๋‹ค๋ฅธ ์žฅ๋น„)๋กœ ๊ตฌ์„ฑ

application.id๋ฅผ ํ†ตํ•œ ๊ทธ๋ฃน

Data Flow

๊ฐœ๋ฐœ ๋ฐฉ์‹ ๋ฐ ๋ฐฐํฌ ๋ฐฉ์‹

Last updated