Kafka Streams, ksqlDB는 kafka 주변에 있는 많은 echo 시스템 중 하나이다.
Realtime Event Stream Processing
실시간 이벤트 스트림 데이터 분석 및 처리의 요구사항은 굉장히 다양하다. 실시간 분석은 Database에 저장 후 분석 및 처리하는 것이 아니라, Kafka에 있는 움직이는 데이터(Data in Motion)를 바로 분석 및 처리해야 한다. 기존에 사용하던 Realtime Event Stream Processing 방법들에는 Apache Spark, Storm, Flink가 있다. Kafka 기반의 Realtime Event Stream Processing 방법들에는 Kafka Publish/Subscribe, Kafka Streams, ksqlDB가 있다.
- 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 Pub/Sub vs Kafka Streams vs ksqlDB
Kafka Pub/Sub를 사용하면 데이터를 가져와서 보내는 그 사이에 있는 모든 애플리케이션, 예를 들어 집계를 하거나 count를 하거나 이런것들을 개발자가 다 코딩해야 한다. kafka stream을 사용하면 내장 함수를 사용해서 아주 코드가 간단해진다. ksqlDB를 사용하면 코딩을 하는것이 아니라 쿼리를 만들면 되기 때문에 더 간단해진다.
kafka와의 구조
중간에 kafka cluster 가 있고 ksqlDB는 ID를 가지고 cluster로 묶이는데 여기에 SQL 구문을 날리면 kafka topic에 있는 데이터를 읽어서 분석을 한 다음에 다시 kafka로 넣어준다. broker와는 별개의 장비에서 동작하도록 구성한다.
kafka streams 기반으로 만든 애플리케이션도 동일하다. 애플리케이션 ID를 기반으로 만들면 하나의 그룹으로 동작하고, kafka topic에 있는 데이터를 읽어서 분석을 한 다음에 다시 kafka로 넣어준다.
배포 방식
ksqlDB는 쿼리를 만든 다음에 쿼리를 실시간으로 적용하면 결과를 바로 확인할 수 있다. kafka streams는 기존 애플리케이션을 개발하는 방식과 비슷하게 코드를 개발한 다음에 테스트하고 애플리케이션을 교체하는 형태로 배포한다.