This episode explores the history and background behind the birth of Debezium, from the evolution of batch ETL toward change data capture, the Red Hat journey to Apache, as well as a comparison of CDC with polling and batch, along with the real use cases that motivated it.

Episode 0 made sure your environment is ready. Now it's time to understand why Debezium exists. Episode 1 answers three big questions: how the capture of changing data has evolved over time, where Debezium comes from, and why change data capture has become the new standard for data engineering.
Many people start using Debezium just by following tutorials, yet understanding its background is far more valuable. By knowing the problem it solves, you'll find it easier to decide when to use CDC, when not to, and how to position it within a data architecture. Let's start from the beginning of the story.
For years, data flow between systems was driven by batch ETL: data was extracted from sources periodically — for example, every night — then transformed and loaded into the target. This pattern is simple and predictable, but it has major weaknesses: latency can reach hours, data is never truly current, and the process is wasteful because it reprocesses the entire dataset even though only a small portion actually changed.
The most common example is a cron job that runs an aggregate query against a transaction table and writes the results to a data warehouse. As long as analytics requirements don't demand real-time data, this pattern is comfortable enough. But the moment an organization wants to make decisions based on fresh data, the limits of the wall quickly become visible.
To reduce latency, many teams switched to polling: the application periodically asks the database whether there are new rows since the last query, using an updated_at column or an incrementing id. This approach is more responsive, but fragile: the columns don't always exist, deletes are not detected, the continuous query load presses down on the production database, and polling logic piles up in every application.
The query pattern usually looks like this:
SELECT id, name, email
FROM customers
WHERE updated_at > ?
ORDER BY updated_at ASC
LIMIT 1000Notice that the pattern above depends on the updated_at column, which must be maintained diligently by the application. If any write path forgets to update that column, the change slips off the polling radar. Row deletion is also completely undetected unless you use soft deletes, so deleted data is still considered present in downstream systems.
Change data capture (CDC) offers a more elegant answer: instead of guessing changes with queries, CDC reads the change records the database already writes to its transaction log. Changes are captured the moment they happen, in their original order, without adding query load to the source database. Debezium is one of the most popular CDC implementations for this approach.
batch ETL (latency in hours)
└── polling (latency in seconds, extra queries)
└── CDC (latency in milliseconds, reads the transaction log)Debezium was first developed around 2016 by Red Hat engineers, inspired by early CDC tools such as Maxwell and Red Hat's internal tool for capturing data changes. The name Debezium comes from a German term meaning base or foundation — fitting for a tool that bridges databases and other systems.
Debezium's journey moved quickly:
Since becoming an Apache project, the Debezium ecosystem has grown rapidly: dozens of connectors, clean documentation, and an active community that keeps improving release quality. The 3.x version you used in episode 0 is the result of that long journey.
Debezium turns your database into an event source. The moment a change happens in the database, Debezium converts it into a structured event and produces it to Kafka. From there, the entire ecosystem can consume it:
This position makes Debezium the foundation between transactional databases and the world of event streaming — a role that matches exactly the meaning of its name.
To make architecture decisions easier, compare these three approaches:
| Aspect | Batch ETL | Polling | CDC |
|---|---|---|---|
| Latency | Hours | Seconds-minutes | Milliseconds |
| Delete detection | Yes, if computed | No | Yes |
| Load on the source | High | High | Low |
| Event ordering | Not guaranteed | Not guaranteed | Guaranteed |
| Transaction integrity | Weak | Weak | Strong |
From this table it's clear: CDC wins on almost every dimension when the primary need is data that's always current. However, batch ETL remains relevant for heavy transformations and historical needs, so all three often coexist within a single architecture.
Debezium was born to solve real-world problems like these:
Info
CDC is not a universal solution. For heavy transformation workloads or historical needs, batch ETL is still required. Understand the problem you're facing first before deciding on the data ingestion pattern.
Episode 1 gave you the context: data processing evolved from slow batch ETL, through fragile polling, toward CDC, which reads the transaction log in real time. Debezium was born at Red Hat around 2016 and is now a healthy Apache top-level project with 3.x releases.
The key takeaways:
In the next episode 2 we'll cover Debezium core concepts and architecture — how connectors read database change logs, the role of Kafka Connect and Kafka topics, offset, heartbeat, and snapshot mechanisms, as well as their relationship to the schema registry and payload formats. This is the architectural foundation that will accompany the entire series.