Capture PostgreSQL Changes in Real-Time with Debezium and Kafka


In today’s fast-paced data-driven world, real-time data processing is critical for building responsive applications and analytics systems. Debezium and Apache Kafka offer a robust solution for Change Data Capture (CDC) if you're using PostgreSQL and need to capture database changes as they happen.

This guide walks you through how to set up Debezium to monitor a PostgreSQL database and stream data changes to Kafka in real time.


What Is Debezium?

Debezium is an open-source distributed platform that captures row-level changes in your databases so that your applications can see and respond to them. Built on top of Apache Kafka and Kafka Connect, it supports multiple databases, including PostgreSQL, MySQL, MongoDB, and more.


Why Use Change Data Capture with PostgreSQL?

CDC allows you to:

  • Replicate data to other systems (e.g., Elasticsearch, MongoDB, data warehouses)

  • Maintain audit logs

  • Sync microservices

  • Trigger workflows on data changes

  • Enable real-time analytics


Architecture Overview

Here's how the system works:

  1. PostgreSQL enables logical replication and streams change logs.

  2. Debezium Connector listens to PostgreSQL’s WAL (Write-Ahead Log).

  3. Kafka Connect serves as the middleware, connecting Debezium with Kafka.

  4. Apache Kafka stores the events in topics.

  5. Consumers (like microservices, ETL tools, or analytics engines) subscribe to Kafka topics.


Prerequisites

  • Docker installed

  • Running PostgreSQL instance (with logical replication enabled)

  • Docker Compose (to simplify setup)

  • Basic familiarity with Kafka


Step-by-Step Setup

1. Enable Logical Replication in PostgreSQL

Update postgresql.conf:


wal_level = logical

max_replication_slots = 1

max_wal_senders = 1


Allow replication user in pg_hba.conf:


host replication debezium_user 0.0.0.0/0 md5


Create a replication user:


CREATE ROLE debezium_user WITH REPLICATION LOGIN PASSWORD 'dbz';



2. Use Docker Compose to Deploy Services

Create a docker-compose.yml:


version: '2'

services:

  zookeeper:

    image: confluentinc/cp-zookeeper

    ...

  kafka:

    image: confluentinc/cp-kafka

    ...

  postgres:

    image: debezium/postgres

    ...

  connect:

    image: debezium/connect

    ...


Bring up the services:


docker-compose up -d



3. Register the Debezium Connector

Use Kafka Connect’s REST API to register the connector:


curl -X POST http://localhost:8083/connectors -H "Content-Type: application/json" -d '{

  "name": "postgres-connector",

  "config": {

    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",

    "database.hostname": "postgres",

    "database.port": "5432",

    "database.user": "debezium_user",

    "database.password": "dbz",

    "database.dbname": "mydb",

    "database.server.name": "pgserver1",

    "plugin.name": "pgoutput"

  }

}'



4. Verify Kafka Topics and Messages

You’ll now see topics like:


pgserver1.public.mytable


Use a Kafka consumer to verify changes:


docker exec -it kafka kafka-console-consumer --bootstrap-server localhost:9092 --topic pgserver1.public.mytable --from-beginning



Benefits of Using Debezium and Kafka

  • Real-time sync between microservices

  • Event-driven architecture

  • Auditing and compliance

  • Low-latency replication pipelines


Common Use Cases

  • Real-time ETL: Ingesting fresh data into data warehouses

  • Materialized Views: Keeping search indexes up-to-date

  • Cache Invalidation: Notifying services to update in-memory caches

  • Data Lake Pipelines: Feeding lakehouses or object storage


Security Considerations

  • Use TLS for Kafka communication

  • Limit the privileges of the replication user.

  • Monitor the WAL size and replication slot activity.


Conclusion

Using Debezium and Kafka to capture changes from PostgreSQL in real time is a robust architecture for modern data workflows. This setup enables reactive programming models, seamless microservice communication, and near-instant insights from your data.

Whether you're a startup or a large enterprise, implementing CDC with Debezium and Kafka will help you unlock the full potential of your data streams.


Comments

Popular posts from this blog

HTTP Basic vs API Key Auth: Best Practices for Secure API Development

ECS Deployment Best Practices: Blue/Green with CodePipeline and CodeDeploy

AWS Console Not Loading? Here’s How to Fix It Fast

YouTube Channel