Skip to main content
We periodically update this article to keep up with the rapidly evolving landscape.

Summary

ksqlDBRisingWave
System categoryStreaming database built on Kafka StreamsStreaming database
LicenseConfluent Community License (not OSI open-source)Apache License 2.0
ArchitectureBuilt on Kafka Streams; requires KafkaCloud-native; decoupled compute and storage
SQL dialectCustom ksqlDB SQLPostgreSQL-compatible SQL
Client librariesREST API and CLIPostgreSQL drivers (Java, Python, Node.js, etc.)
State managementRocksDB on local disk; changelog in Kafka topicsHummock LSM-tree persisted to object storage (S3)
Storage dependencyKafka required for all data storageIndependent object storage (S3, GCS, Azure Blob)
Query servingPull queries with limitationsFull SQL ad-hoc queries with high concurrency
Materialized viewsCTAS tables with limited pull queriesFull SQL materialized views with cascading support
IntegrationsVia Kafka ConnectBuilt-in source and sink connectors via SQL
Learning curveModerate (requires Kafka expertise)Shallow (PostgreSQL knowledge transfers directly)
Typical use casesKafka-centric stream processingStreaming ETL, analytics, and online serving

Introduction

ksqlDB is a streaming database purpose-built for Apache Kafka; RisingWave is a general-purpose streaming database with PostgreSQL compatibility.

ksqlDB

ksqlDB is a streaming database developed by Confluent for building stream processing applications on top of Apache Kafka. It provides a SQL interface over Kafka topics, enabling users to create streams and tables, run continuous queries, and serve point-in-time lookups. Under the hood, ksqlDB translates SQL statements into Kafka Streams topologies. It is licensed under the Confluent Community License, which restricts its use in competing SaaS offerings.

RisingWave

RisingWave is an open-source distributed SQL streaming database designed for real-time data processing. It uses PostgreSQL-compatible SQL and stores data in object storage (S3, GCS, Azure Blob), enabling independent scaling of compute and storage. RisingWave supports ingesting data from a wide range of sources — not just Kafka — and can serve concurrent ad-hoc queries directly.

Kafka dependency

ksqlDB requires a running Kafka cluster for all operations; RisingWave operates independently and treats Kafka as one of many optional data sources. ksqlDB is tightly coupled with Apache Kafka. All input data must reside in Kafka topics, all output is written to Kafka topics, and internal state is backed by Kafka changelog topics. A running Kafka cluster (with ZooKeeper or KRaft) is required at all times. ksqlDB also generates multiple internal Kafka topics per query (output, repartition, changelog, command topics), adding load to the Kafka brokers. RisingWave operates independently and does not require Kafka. While it supports Kafka as a source and sink, it also supports direct CDC from PostgreSQL, MySQL, SQL Server, and MongoDB, as well as ingestion from S3, Pulsar, Kinesis, MQTT, and webhooks. This makes RisingWave suitable for architectures that don’t use Kafka.

SQL compatibility

ksqlDB uses a custom SQL dialect with significant restrictions; RisingWave uses PostgreSQL-compatible SQL. ksqlDB uses its own SQL dialect that differs from standard SQL. Key limitations include:
  • Join expressions must be single-column equality comparisons only — no non-equi joins or multi-column joins.
  • Stream-stream joins require a WITHIN time-window clause.
  • Pull queries (point-in-time lookups) support only a strict subset of SQL — no joins, GROUP BY, WINDOW, or PARTITION BY.
  • No NOT NULL constraints.
RisingWave uses PostgreSQL-compatible SQL, which means existing SQL knowledge transfers directly. It supports multi-way JOINs, subqueries, CTEs, window functions, and a wide range of built-in functions. Any tool or driver compatible with PostgreSQL can connect to RisingWave.

State management and storage

ksqlDB relies on local RocksDB plus Kafka changelog topics; RisingWave persists state to cloud object storage. ksqlDB inherits Kafka Streams’ state management approach: internal state is stored in RocksDB on local disk and backed by compacted Kafka changelog topics. If a ksqlDB server fails, state must be rematerialized by replaying the changelog from Kafka, which can be time-consuming for large state. RisingWave uses Hummock, a cloud-native LSM-tree storage engine that persists all state and data to object storage (S3, GCS, Azure Blob). This approach decouples compute from storage, enabling independent scaling and eliminating local disk dependencies. Frequent checkpointing ensures fast recovery from failures.

Query serving

ksqlDB pull queries have significant limitations; RisingWave supports full SQL ad-hoc queries with high concurrency. ksqlDB offers three query types:
  1. Persistent queries (CSAS/CTAS): Run continuously and write results to Kafka topics.
  2. Push queries: Stream results to subscribed clients in real time.
  3. Pull queries: Point-in-time lookups against materialized tables. However, pull queries are limited to key-based lookups by default, do not support joins or aggregations, and the ksqlDB documentation warns of potential deadlocks under concurrent pull query load.
RisingWave supports full SQL ad-hoc queries over tables, materialized views, and sources. Queries are served by dedicated Serving Nodes optimized for high concurrency and low latency. There are no restrictions on query complexity — you can use joins, aggregations, subqueries, and window functions in ad-hoc queries.

Materialized views

ksqlDB supports materialized tables with limited queryability; RisingWave supports cascading materialized views with full SQL access. In ksqlDB, CREATE TABLE AS SELECT (CTAS) creates a materialized table that is incrementally updated and can be queried via pull queries. However, pull queries are limited (see above), and plain CREATE TABLE tables are not materialized and cannot be queried via pull queries. RisingWave supports CREATE MATERIALIZED VIEW with full SQL semantics. Materialized views are incrementally maintained in real time and can be queried with unrestricted SQL. RisingWave also supports cascading materialized views — building materialized views on top of other materialized views — which enables multi-layered streaming pipelines entirely in SQL.

Connectors and integrations

ksqlDB relies on Kafka Connect for external integrations; RisingWave has built-in connectors defined via SQL. ksqlDB integrates with external systems through Kafka Connect. Connectors must be installed from Confluent Hub and managed either in a separate Connect cluster or in embedded mode. Only the JDBC connector is natively documented. RisingWave provides built-in source and sink connectors that are defined directly in SQL statements (CREATE SOURCE, CREATE TABLE, CREATE SINK). This includes native CDC connectors for PostgreSQL, MySQL, SQL Server, and MongoDB, as well as connectors for Kafka, S3, Iceberg, Snowflake, ClickHouse, and many more.

Scalability

ksqlDB parallelism is bounded by Kafka partition count; RisingWave scales compute and storage independently. In ksqlDB, maximum parallelism for a query is bounded by the number of partitions in the input Kafka topic. For example, a topic with 5 partitions can only be processed by 5 parallel threads. Scaling requires repartitioning the Kafka topic, which is a complex operation. RisingWave scales compute and storage independently. Compute nodes can be added or removed based on workload, and storage scales elastically via cloud object storage. There is no partition-count bottleneck.

How to choose?

Choose ksqlDB if:
  • Your architecture is fully Kafka-centric and all data already lives in Kafka topics.
  • You need a lightweight SQL layer for simple Kafka transformations.
  • You are already using Confluent Platform and want tight integration.
Choose RisingWave if:
  • You need to ingest data from multiple sources (databases, object storage, message queues), not just Kafka.
  • You need full SQL ad-hoc query capabilities over streaming results.
  • You want cascading materialized views for complex multi-layered streaming pipelines.
  • You need an open-source solution (Apache 2.0 license).
  • You want a PostgreSQL-compatible interface with standard client library support.
  • You need elastic, cloud-native scaling independent of Kafka partition counts.
Confluent has shifted its strategic focus toward Apache Flink as its primary stream processing solution. Teams evaluating ksqlDB for new projects should consider this trajectory.