10.8.1 – Deployment Models
Module: Section 10 – Kafka Ecosystem & Tools
Section: 10.8 – ksqlDB in Production
Goal: Understand deployment options for ksqlDB
Interactive Mode
For: Development, exploration
ksql.service.id=my-ksql-cluster
bootstrap.servers=localhost:9092
listeners=http://0.0.0.0:8088
ksql-server-start /etc/ksqldb/ksqldb-server.properties
Usage: ksqlDB CLI, REST API
Headless Mode
For: Production deployments
ksql-server-start /etc/ksqldb/ksqldb-server.properties \
--queries-file /app/queries.sql
queries.sql:
CREATE STREAM orders (...) WITH (...);
CREATE TABLE users (...) WITH (...);
CREATE STREAM enriched_orders AS
SELECT * FROM orders LEFT JOIN users ...;
Benefits: Deterministic, version-controlled, CI/CD friendly
High Availability Setup
3 ksqlDB servers:
Server 1: ksql.service.id=prod-ksql, bootstrap.servers=kafka:9092
Server 2: ksql.service.id=prod-ksql, bootstrap.servers=kafka:9092
Server 3: ksql.service.id=prod-ksql, bootstrap.servers=kafka:9092
Load Balancer → [Server 1, Server 2, Server 3]
Automatic failover: If server crashes, others take over partitions
Docker Deployment
version: '3'
services:
ksqldb-server:
image: confluentinc/ksqldb-server:latest
ports:
- "8088:8088"
environment:
KSQL_BOOTSTRAP_SERVERS: kafka:9092
KSQL_LISTENERS: http://0.0.0.0:8088
KSQL_KSQL_SERVICE_ID: docker-ksql
Key Takeaways
- Interactive: Development, ad-hoc queries
- Headless: Production, predefined queries
- HA: Multiple servers with same service ID
- Docker: Containerized deployment
What's Next?
Next Module: 10.8.2 – Scaling & Performance