Laravel

How to implement real-time database CDC with Debezium Kafka for Laravel microservices?

December 3, 2025

download ready
Thank You
Your submission has been received.
We will be in touch and contact you soon!

Debezium captures PostgreSQL/MySQL binlog changes streaming row-level INSERT/UPDATE/DELETE events to Kafka topics with before/after states. Laravel Outbox pattern atomically queues domain events in database transactions ensuring exactly-once delivery. Horizon consumers process Kafka messages updating search indexes, caches, analytics projections. Enables CQRS eventual consistency across microservices without dual writes or distributed transactions.

Example:-

Code

/ 1. Debezium connector config (docker-compose)
debezium:
  image: debezium/connect
  environment:
    BOOTSTRAP_SERVERS: kafka:9092
    CONNECTOR_NAME: orders-cdc
    DATABASE_SERVER_NAME: orders
    TABLE_INCLUDE_LIST: orders.order

// 2. Laravel Outbox Event
class OrderPlaced 
{
    use Dispatchable, InteractsWithQueue;
    
    public function handle(KafkaConsumer $consumer)
    {
        $cdcEvent = $consumer->poll('orders.order');
        if ($cdcEvent->op === 'c') {
            Cache::put("order:{$cdcEvent->after->id}", $cdcEvent->after);
            SearchIndex::upsert($cdcEvent->after);
        }
    }
}

// 3. Horizon consumer
Horizon::addListener(CdcProcessor::class);
      
Hire Now!

Need Help with Laravel Development ?

Work with our skilled laravel developers to accelerate your project and boost its performance.
**Hire now**Hire Now**Hire Now**Hire now**Hire now

How to implement real-time database CDC with Debezium Kafka for Laravel microservices?

Debezium captures PostgreSQL/MySQL binlog changes streaming row-level INSERT/UPDATE/DELETE events to Kafka topics with before/after states. Laravel Outbox pattern atomically queues domain events in database transactions ensuring exactly-once delivery. Horizon consumers process Kafka messages updating search indexes, caches, analytics projections. Enables CQRS eventual consistency across microservices without dual writes or distributed transactions.

Example:-

Code

/ 1. Debezium connector config (docker-compose)
debezium:
  image: debezium/connect
  environment:
    BOOTSTRAP_SERVERS: kafka:9092
    CONNECTOR_NAME: orders-cdc
    DATABASE_SERVER_NAME: orders
    TABLE_INCLUDE_LIST: orders.order

// 2. Laravel Outbox Event
class OrderPlaced 
{
    use Dispatchable, InteractsWithQueue;
    
    public function handle(KafkaConsumer $consumer)
    {
        $cdcEvent = $consumer->poll('orders.order');
        if ($cdcEvent->op === 'c') {
            Cache::put("order:{$cdcEvent->after->id}", $cdcEvent->after);
            SearchIndex::upsert($cdcEvent->after);
        }
    }
}

// 3. Horizon consumer
Horizon::addListener(CdcProcessor::class);