Subscribe


Debezium 0.6 Is Out

What’s better than getting Java 9? Getting Java 9 and a new version of Debezium at the same time! So it’s with great happiness that I’m announcing the release of Debezium 0.6 today.

What’s in it?

Debezium is now built against and tested with Apache Kafka 0.11.0. Also the Debezium Docker images have been updated do that version (DBZ-305). You should make sure to read the Kafka update guide when upgrading from an earlier version.

To improve integration with existing Kafka sink connectors such as the JDBC sink connector or the Elasticsearch connector, Debezium provides a new single message transformation (DBZ-226). This SMT converts Debezium’s CDC event structure into a more conventional structure commonly used in other sink and non-CDC source connectors where the message represents the state of the inserted or updated row, or null in the case of a deleted row. This lets your for instance capture the changes from a table in MySQL and update a corresponding table in a Postgres database accordingly. We’ll provide a complete example showing the usage of that new SMT in the next few days.

If you are doing the Debezium tutorial, you will like the new Docker Compose set-up provided in the examples repo (DBZ-127). This lets you start all the required Docker containers with a single command.

New connector features

Now let’s take a look at some of the changes around the specific Debezium connectors. The MySQL connector has seen multiple improvements, e.g.:

  • Snapshot consistency wasn’t guaranteed before in some corner cases (DBZ-210); that’s fixed now

  • DEC and FIXED types supported in the DDL parser (DBZ-359; thanks to Liu Hanlin!)

  • UNION clause supported for ALTER TABLE (DBZ-346)

For the MongoDB connector, the way of serializing ids into the key payload of CDC events has changed (DBZ-306). The new format allows to read back ids into the correct type. We also took the opportunity and made the id field name consistent with the other connectors, i.e. it’s "id" now. Note: that change may break existing consumers, so some work on your end may be required, depending on the implementation of your consumer. The details are discussed in the release notes and the format of message keys is described in depth in the connector documentation. Kudos to Hans-Peter Grahsl who contributed on this feature!

Another nice improvement for this connector is support for SSL connections (DBZ-343).

Finally, the Postgres connector learned some new tricks, too:

  • Support for variable-width numeric columns (DBZ-318)

  • Views won’t stop the connector any more (DBZ-319)

  • Warnings and notifications emitted by the server are correctly forwarded to the log (DBZ-279)

Please refer to the changelog for an overview of all the 20 issues fixed in Debezium 0.6.0.

What’s next?

High on our agenda is exploring support for Oracle (DBZ-20). We are also looking into using another logical decoding plug-in (wal2json) for the Postgres connector, which would enable to use Debezium with Postgres instances running on Amazon RDS. Another feature being worked on by community member Moira Tagle is support for updates to the table.whitelist for existing connector instances. Finally, we’ve planned to test and adapt the existing MySQL connector for providing CDC functionality to MariaDB.

Debezium 0.7 with one or more out of those features as well as hopefully some others will be released later this year. We’ll likely also do further 0.6.x releases with bug fixes as required.

You’d like to contribute? That’s great - let us know and we’ll get you started. Check out the details below on how to get in touch.

About Debezium

Debezium is an open source distributed platform that turns your existing databases into event streams, so applications can see and respond almost instantly to each committed row-level change in the databases. Debezium is built on top of Kafka and provides Kafka Connect compatible connectors that monitor specific database management systems. Debezium records the history of data changes in Kafka logs, so your application can be stopped and restarted at any time and can easily consume all of the events it missed while it was not running, ensuring that all events are processed correctly and completely. Debezium is open source under the Apache License, Version 2.0.

Get involved

We hope you find Debezium interesting and useful, and want to give it a try. Follow us on Twitter @debezium, chat with us on Gitter, or join our mailing list to talk with the community. All of the code is open source on GitHub, so build the code locally and help us improve ours existing connectors and add even more connectors. If you find problems or have ideas how we can improve Debezium, please let us know or log an issue.


Debezium 0.5.2 Is Out

I’m very happy to announce the release of Debezium 0.5.2!

As the previous release, the 0.5.2 release fixes several bugs in the MySQL, Postgres and MongoDB connectors. But there are also several new features and options:

  • The decimal.handling.mode option already known from the MySQL connector is now also supported for PostgreSQL (DBZ-337). It lets you control how NUMERIC and DECIMAL columns are represented in change events (either using Kafka’s Decimal type or as double).

  • The MongoDB connector supports the options database.whitelist and database.blacklist now (DBZ-302)

  • The PostgreSQL connector can deal with array-typed columns as well as with quoted identifiers for tables, schemas etc. (DBZ-297, DBZ-298)

  • The Debezium Docker images run on Red Hat’s OpenShift cloud environment (DBZ-267)

Speaking about the Docker images, we’ve set up nightly tags for the Debezium images on Docker Hub, allowing you to grab the latest improvements even before an official release has been cut. The connector archives are also deployed to the Sonatype OSS Maven repository.

Finally, we’ve spent some time to extend the documentation on some things not covered before:

  • Avro Serialization describes how to use the use the Avro converter and the Confluent Schema Registry instead of the JSON converter instead of the default JSON converter for serializing change events, resulting in much smaller message sizes; The Avro converter itself has also been added to the Debezium Docker image for Kafka Connect, so you can use it right away

  • Topic Routing describes how to use Debezium’s ByLogicalTableRouter single message transformation (SMT) for routing the change events from multiple tables into a single topic, which for instance is very useful when working with sharded tables

Please refer to the changelog for an overview of all the 19 issues fixed in Debezium 0.5.2.

The following people from the community have sent in pull requests for this release: Emrul Islam, Eric S. Kreiser, Mario Mueller, Matteo Capitanio, Omar Al-Safi and Satyajit Vegesna.

Thanks a lot to you and everyone else in the community for contributing to Debezium via feature requests, bug reports, discussions and questions!

What’s next

The next version of Debezium will be 0.6 (planned for September). This release is planned to bring the upgrade to Kafka 0.11. We’ll also look into an SMT for transforming the change events emitted by Debezium into a flat representation, which for instance will be very useful in conjunction with the JDBC sink connector.

While 0.6 is planned to be more of a "stabilization release", 0.7 should bring a long-awaited major feature: we’ve planned to explore support for Oracle and hopefully will do an initial release of a Debezium connector for that database.

In other words, exciting times are ahead! If you’d like to get involved, let us know. Check out the details below on how to get in touch.

About Debezium

Debezium is an open source distributed platform that turns your existing databases into event streams, so applications can see and respond almost instantly to each committed row-level change in the databases. Debezium is built on top of Kafka and provides Kafka Connect compatible connectors that monitor specific database management systems. Debezium records the history of data changes in Kafka logs, so your application can be stopped and restarted at any time and can easily consume all of the events it missed while it was not running, ensuring that all events are processed correctly and completely. Debezium is open source under the Apache License, Version 2.0.

Get involved

We hope you find Debezium interesting and useful, and want to give it a try. Follow us on Twitter @debezium, chat with us on Gitter, or join our mailing list to talk with the community. All of the code is open source on GitHub, so build the code locally and help us improve ours existing connectors and add even more connectors. If you find problems or have ideas how we can improve Debezium, please let us know or log an issue.


Debezium 0.5.1 Released

It’s my pleasure to announce the release of Debezium 0.5.1!

This release fixes several bugs in the MySQL, Postgres and MongoDB connectors. There’s also support for some new datatypes: POINT on MySQL (DBZ-222) and TSTZRANGE on Postgres (DBZ-280). This release is a drop-in replacement for 0.5.0, upgrading is recommended to all users.

Note that in the — rather unlikely — case that you happened to enable Debezium for all the system tables of MySQL, any configured table filters will be applied to these system tables now, too (DBZ-242). This may require an adjustment of your filters if you indeed wanted to capture all system tables but only selected non-system tables.

Please refer to the changelog for an overview of all the 29 issues fixed in Debezium 0.5.1.

The Docker image containing Kafka Connect and all the Debezium 0.5.x connectors as well as the image containing Postgres and the Debezium logical decoding plug-in have been updated to 0.5.1, too.

As Debezium continues to evolve and grow, the number of people contributing to the project is also going up. The following people have sent in pull requests for this release: Aaron Rosenberg, Alexander Kukushkin, Brendan Maguire, Duncan Sands, David Leibovic, Jiri Pechanec, nacivida, Omar Al-Safi, Randall Hauch and Tom Bentley.

Thanks a lot to you and everyone else in the community contributing via feature requests, bug reports, discussions and questions!

What’s next

We’ve planned to do further bug fix releases for the 0.5.x line. Specifically, we’ll release a fix for DBZ-217 shortly, which is about the MySQL connector stumbling when getting across a corrupt event in the binlog.

In parallel we’re looking into Debezium connectors for SQL Server and Oracle. While we cannot promise anything yet in terms of when these will be ready to be published, we hope to have at least one of them ready some time soon. Stay tuned and get involved!

About Debezium

Debezium is an open source distributed platform that turns your existing databases into event streams, so applications can see and respond almost instantly to each committed row-level change in the databases. Debezium is built on top of Kafka and provides Kafka Connect compatible connectors that monitor specific database management systems. Debezium records the history of data changes in Kafka logs, so your application can be stopped and restarted at any time and can easily consume all of the events it missed while it was not running, ensuring that all events are processed correctly and completely. Debezium is open source under the Apache License, Version 2.0.

Get involved

We hope you find Debezium interesting and useful, and want to give it a try. Follow us on Twitter @debezium, chat with us on Gitter, or join our mailing list to talk with the community. All of the code is open source on GitHub, so build the code locally and help us improve ours existing connectors and add even more connectors. If you find problems or have ideas how we can improve Debezium, please let us know or log an issue.


Hello Debezium!

When I first learned about the Debezium project last year, I was very excited about it right away.

I could see how this project would be very useful for many people out there and I was very impressed by the professional way it was set up: a solid architecture for change data capture based on Apache Kafka, a strong focus on robustness and correctness also in the case of failures, the overall idea of creating a diverse eco-system of CDC connectors. All that based on the principles of open source, combined with extensive documentation from day one, a friendly and welcoming web site and a great getting-started experience.

So you can imagine that I was more than enthusiastic about the opportunity to take over the role of Debezium’s project lead. Debezium and CDC have close links to some data-centric projects I’ve been previously working on and also tie in with ideas I’ve been pursuing around CQRS, even sourcing and denormalization. As core member of the Hibernate team at Red Hat, I’ve implemented the initial Elasticsearch support for Hibernate Search (which deals with full-text index updates via JPA/Hibernate). I’ve also contributed to Hibernate OGM - a project which connects JPA and the world of NoSQL. One of the plans for OGM is to create a declarative denormalization engine for creating read models optimized for specific use cases. It will be very interesting to see how this plays together with the capabilities provided by Debezium.

Currently I am serving as the lead of the Bean Validation 2.0 specification (JSR 380) as well as its reference implementation Hibernate Validator. Two other projects close to my heart are MapStruct - a code generator for bean-to-bean mappings - and ModiTect, which is tooling for Java 9 modules and their descriptors. In general, I’m a strong believer into the idea of open source and I just love it to work with folks from all over the world to create useful tools and libraries.

Joining the Debezium community and working on change data capture is a great next step. There are so many things to do: connectors for Oracle, SQL Server and Cassandra, but also things like an entity join processor which would allow to step from row-level events to more aggregated business-level events (e.g. for updating a combined search index for an order and its order lines) or tooling for managing and visualizing histories of event schema changes.

One thing I’d like to emphasize is that the project’s direction generally isn’t going to change very much. Red Hat is fully committed to maintaining and evolving the project together with you, the Debezium community. The ride really has just begun!

Finally, let me say a huge thank you to Randall for his excellent work! You’ve been a true role model for going from an idea over pitching it - within Red Hat as well as within the wider community - to building a steadily growing and evolving project. It’s stating the obvious, but it wouldn’t be for Debezium without you. Thanks for everything and looking forward very much to working with you and the community on this great project!

Onwards,

--Gunnar


Debezium Evolving

Just before I started the Debezium project in early 2016, Martin Kleppmann gave several presentations about turning the database inside out and how his Bottled Water project demonstrated the importantance that change data capture can play in using Kafka for stream processing. Then Kafka Connect was announced, and at that point it seemed obvious to me that Kafka Connect was the foundation upon which practical and reusable change data capture can be built. As these techniques and technologies were becoming more important to Red Hat, I was given the opportunity to start a new open source project and community around building great CDC connectors for a variety of databases management systems.

Over the past few years, we have created Kafka Connect connectors for MySQL, then MongoDB, and most recently PostgreSQL. Each were initially limited and had a number of problems and issues, but over time more and more people have tried the connectors, asked questions, answered questions, mentioned Debezium on Twitter, tested connectors in their own environments, reported problems, fixed bugs, discussed limitations and potential new features, implemented enhancements and new features, improved the documentation, and wrote blog posts. Simply put, people with similar needs and interests have worked together and have formed a community. Additional connectors for Oracle and SQL Server are in the works, but could use some help to move things along more quickly.

It’s really exciting to see how far we’ve come and how the Debezium community continues to evolve and grow. And it’s perhaps as good a time as any to hand the reigns over to someone else. In fact, after nearly 10 wonderful years at Red Hat, I’m making a bigger change and as of today am part of Confluent’s engineering team, where I expect to play a more active role in the broader Kafka community and more directly with Kafka Connect and Kafka Streams. I definitely plan to stay involved in the Debezium community, but will no longer be leading the project. That role will instead be filled by Gunnar Morling, who’s recently joined the Debezium community but has extensive experience in open source, the Hibernate community, and the Bean Validation specification effort. Gunnar is a great guy and an excellent developer, and will be an excellent lead for the Debezium community.

Will the Debezium project change? To some degree it will always continue to evolve just as it has from the very beginning, and that’s a healthy thing. But a lot is staying the same. Red Hat remains committed to the Debezium project, and will continue its sponsorship and community-oriented governance that has worked so well from the beginning. And just as importantly, we the community are still here and will continue building the best open source CDC connectors.

So keep up the great work, and look for and take advantage of opportunities to become more involved in Debezium. Please give a warm welcome to Gunnar by introducing yourself in the developer and / or user chat rooms and mention how you’re using Debezium and what the Debezium community means to you.


back to top