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