> Markdown version of [/videos/535-practical-change-data-streaming-use-cases-with-debezium-and-quarkus](https://www.wearedevelopers.com/videos/535-practical-change-data-streaming-use-cases-with-debezium-and-quarkus). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Practical Change Data Streaming Use Cases With Debezium And Quarkus Eliminate the dual writes problem in your microservices. Learn to implement the outbox pattern with Debezium, Kafka, and Quarkus for scalable, fault-tolerant data consistency. - **Speakers:** [Alex Soto](https://www.wearedevelopers.com/@alex-soto) - **Event:** WeAreDevelopers LIVE - **Published:** April 18, 2023 - **Duration:** 52:15 - **URL:** https://www.wearedevelopers.com/videos/535-practical-change-data-streaming-use-cases-with-debezium-and-quarkus ## Summary Microservices architectures frequently encounter the "dual writes" problem, where a system must update its primary database and reliably propagate that state to other services, data warehouses, or search indexes. Traditional solutions like distributed transactions or polling mechanisms are prone to inconsistencies and blocking. This session demonstrates how change data capture (CDC) offers a robust alternative by streaming database changes in real-time. By leveraging Debezium and Apache Kafka, developers can tap directly into database transaction logs, ensuring that every insert, update, or delete is automatically and reliably published as an event. The core of the solution relies on architectural patterns like the outbox pattern and the strangler fig pattern. The outbox pattern avoids distributed transactions by writing state changes and outbound events to a dedicated outbox table within a single local database transaction. Debezium then captures these outbox entries and routes them to Kafka topics, ensuring guaranteed delivery to downstream services without data loss. Furthermore, the strangler fig pattern utilizes CDC to gradually and safely migrate monolithic applications to microservices. By syncing data between legacy relational databases and new NoSQL stores in real-time, teams can reroute read and write operations incrementally while maintaining a seamless rollback path. Built with Java developers in mind, the demonstration showcases Quarkus—a Kubernetes-native framework—to implement the outbox pattern with minimal boilerplate. Additionally, deploying and managing this event-driven infrastructure is simplified by using Strimzi, a Kubernetes operator for provisioning Kafka clusters. Ultimately, by shifting from dual writes to log-based change data capture, engineering teams can build scalable, fault-tolerant architectures that maintain strict data consistency across distributed ecosystems. **Keywords:** change data capture, debezium, apache kafka, quarkus framework, outbox pattern, strangler fig pattern, dual writes problem, microservices data consistency, database transaction logs, event-driven architecture, strimzi operator, kubernetes kafka deployment, monolith to microservices migration, distributed data replication ## Chapters 1. **Session agenda for practical change data streaming** (00:04) — An introduction to overcoming synchronization inconsistencies using change data capture and messaging platforms. 1. **Understanding the dual rights anti-pattern in microservices** (02:38) — How propagating data to multiple services simultaneously leads to transaction failures and inconsistencies. 1. **Processing real-time event streams with Apache Kafka** (06:26) — Core concepts of a publish-subscribe system built for distributed fault-tolerance and scalability. 1. **Defining the change data capture architecture pattern** (12:10) — Capturing database insertions and updates to automatically populate a messaging topic for downstream consumptions. 1. **Extracting transaction logs using Debezium source connectors** (16:03) — Using connectors to monitor database transaction logs and emit standardized json event records. 1. **Implementing the transactional outbox pattern for reliable delivery** (22:55) — Writing domain events to a dedicated database table within a single transaction scope. 1. **Evolving legacy monoliths using the strangler fig pattern** (28:12) — A gradual migration strategy that mirrors real-time database changes from monoliths to new microservices. 1. **Deploying enterprise Java systems on Kubernetes with Strimzi** (32:57) — Configuring cluster operators and developing native cloud binaries to capture data changes. 1. **Demonstrating a practical outbox pipeline via Docker Compose** (35:54) — An interactive walkthrough showing how service requests trigger database logs that automatically populate topics. 1. **Answering architecture questions on downtime and custom messaging** (42:17) — Addressing challenges with manual synchronization, transaction failures before persistence, system design tools, and career growth. ## Related Moments - [Demonstrating event-driven auto-scaling with native Quarkus and Kafka](https://www.wearedevelopers.com/videos/1008-serverless-java-in-action-cloud-agnostic-design-patterns-and-tips) (from "Serverless Java in Action: Cloud Agnostic Design Patterns and Tips") - [Moving from traditional databases to decoupled event streaming](https://www.wearedevelopers.com/videos/91-from-event-streaming-to-event-sourcing-101) (from "From event streaming to event sourcing 101") - [Introducing data management and the shift to streaming](https://www.wearedevelopers.com/videos/538-event-messaging-and-streaming-with-apache-pulsar) (from "Event Messaging and Streaming with Apache Pulsar") - [Technology stack for building robust microservices applications](https://www.wearedevelopers.com/videos/89-development-of-reactive-applications-with-quarkus) (from "Development of reactive applications with Quarkus") - [Overcoming integration challenges with Kafka Streams microservices](https://www.wearedevelopers.com/videos/168-kafka-streams-microservices) (from "Kafka Streams Microservices") - [Integrating legacy monoliths with change data capture](https://www.wearedevelopers.com/videos/494-the-rise-of-reactive-microservices) (from "The Rise of Reactive Microservices") ## Related Articles - [Why Event-Driven Architecture Isn’t About Speed (and When You Actually Need It)](https://www.wearedevelopers.com/magazine/745-why-event-driven-architecture-isn-t-about-speed-and-when-you-actually-need-it) - [Dev Digest 132 - Binging WADFlix?](https://www.wearedevelopers.com/magazine/473-dev-digest-132-binging-wadflix) - [Devs vs. Marketers, COBOL and Copilot, Make Live Coding Easy and more - The Best of LIVE 2025 - Part 3](https://www.wearedevelopers.com/magazine/663-devs-vs-marketers-cobol-and-copilot-make-live-coding-easy-and-more-the-best-of-live-2025-part-3) - [WeAreDevelopers Dev Digest Issue 116 - The new search wars…](https://www.wearedevelopers.com/magazine/445-wearedevelopers-dev-digest-issue-116-the-new-search-wars) ## Related Jobs - [Sr. Open Source Software Engineer (Kafka)](https://www.wearedevelopers.com/jobs/48543-sr-open-source-software-engineer-kafka) at **NetApp** - [Principal Solutions Architect, Professional Services](https://www.wearedevelopers.com/jobs/ext/2831732-principal-solutions-architect-professional-services) at **Docker, Inc.** - [DevOps Engineer](https://www.wearedevelopers.com/jobs/ext/3009059-devops-engineer) at **ZEISS Group** - [DevOps Engineer](https://www.wearedevelopers.com/jobs/ext/2975761-devops-engineer) at **ZEISS Group** - [Cloud Engineer (German)](https://www.wearedevelopers.com/jobs/ext/2908194-cloud-engineer-german) at **Stackit** - [Stackit Database - Go Developer](https://www.wearedevelopers.com/jobs/ext/3003168-stackit-database-go-developer) at **Stackit**