If the changes should go somewhere other than Kafka 129 , Debezium 317,608 Server runs the same connectors in a standalone Quarkus application (Java 21) with a sink instead of Kafka Connect 129 : Kinesis, Pub/Sub, Event Hubs, Redis 2,763 , NATS, Pulsar, RabbitMQ 28,807 , HTTP, JDBC, Iceberg 129 and more. Offsets live in a local file. It is configured with one properties file:
debezium.sink.type=http
debezium.sink.http.url=http://l2-cdc-receiver:8080/orders
debezium.source.connector.class=io.debezium.connector.postgresql.PostgresConnector
debezium.source.offset.storage.file.filename=data/offsets.dat
debezium.source.table.include.list=public.orders
debezium.source.plugin.name=pgoutput
debezium.source.slot.name=booknest_server
debezium.source.snapshot.mode=no_data
debezium.format.value=json
debezium.format.value.schemas.enable=falsecdc/c5.sh started quay.io/debezium/server:3.7 next to a 20-line Python HTTP receiver, then inserted, cancelled and deleted a sample order:
02:57:01 debezium-server-dist 3.7.0.Final on JVM (powered by Quarkus 3.33.2) started in 10.9... 02:57:05 Starting streaming POST /orders op=c order_id=900002 status=placed lsn=809344240 POST /orders op=u order_id=900002 status=cancelled lsn=809374024 POST /orders op=d order_id=900002 status=cancelled lsn=809382640
docker stats put the server at 398 MiB, against 1.48 GiB for the Connect worker after the snapshot plus 388 MiB for the broker. The trade: no replay from a topic, one consumer per slot, and at-least-once delivery, so the receiver must tolerate duplicates (deduplicate on order_id and lsn). Choose Debezium Server for one destination outside Kafka, and Kafka Connect when several consumers share the stream. The Debezium Engine library goes one step further and runs a connector inside your own Java application.