
ksqlDB는 Kafka 위에서 동작하는 Streaming 전용 데이터베이스다.
SQL 문법을 통해 Streaming 데이터를 실시간으로 처리할 수 있도록 구성되어 있으며 Kafka Streams API 기반으로 실행된다.
즉 연속해서 들어오는 Kafka Topic 데이터를 SQL 형태로 가공하고 분석하기 위한 구조다.

ksqlDB의 내부 실행 구조는 Kafka Streams API를 기반으로 구성된다.
Streaming 처리는 다음 요소들로 이루어진다.
Streams 애플리케이션은 Topic에서 데이터를 읽고 Topology를 따라 연속적인 처리를 수행하며 필요한 상태는 State Store에 저장된다.
State Store는 RocksDB 기반으로 구성된다.
Producer–Consumer 방식과 비교하면 Streams 방식은 Topology와 State Store를 활용하는 구조로 실시간 처리를 위한 더 복합적인 실행 모델을 가진다.
RocksDB는 Key-Value 기반 Embedded Database로
Streaming 처리에서 상태를 저장하기 위한 엔진으로 사용된다.
Kafka Streaming 구조에서는 Partition 단위로 RocksDB 인스턴스가 생성된다.
즉 Streaming 처리 과정의 중간 상태나 집계 데이터는
각 Streams Task에 연결된 RocksDB에 저장된다.

ksqlDB는 입력된 SQL을 Kafka Streams Topology로 변환하여 실행한다.
Streaming 처리는 Partition 단위로 분리되며 각 Partition은 하나의 Stream Task가 담당한다.
입력 Topic의 Partition 수에 따라 Sub-Topology와 Task가 결정된다.
예를 들어 Partition이 3개인 Topic을 사용하면 3개의 Sub-Topology와 3개의 Stream Task가 생성된다.

Streaming 병렬도는 Partition과 Task를 기준으로 구성된다.
또한 여러 Topic이 동일한 Partition 수를 가지는 경우
각 Partition에 대해 동일한 수의 Stream Task가 생성된다.
Streaming 기반 실시간 처리 구조는 일반적인 RDBMS 기반 분석 구조와 다음과 같은 차이를 가진다.
RDBMS 기반 처리
Streaming 기반 처리 구조
Streaming 분석 환경에서는 데이터가 지속적으로 흘러들어오는 구조를 기반으로 하기 때문에 Partition 기반의 자연스러운 병렬 구조를 활용할 수 있는 것이 장점이다.
ksqlDB는 다음과 같은 실시간 처리 환경에서 사용된다.
이처럼 다양한 Streaming 데이터 처리 환경에서 ksqlDB는 SQL 기반 실시간 분석 구조를 제공한다.