I am excited to announce the release of Debezium 2.0.0.CR1!

This release contains breaking changes, stability fixes, and bug fixes, all to inch us closer to 2.0.0.Final. Overall, this release contains a total of 53 issues that were fixed.

If you intend to upgrade to 2.0.0.CR1, we strongly recommend that you read the release notes before the upgrade to understand all breaking changes. There was one noteworthy breaking changes with the 2.0.0.CR1 release:

Behavior of schema.name.adjustment.mode has changed

The schema.name.adjustment.mode configuration property controls how schema names should be adjusted for compatibility with the message converter used by the connector. This configuration option can be one of two values:

avro

Repliaces the characters that cannot be used in the Avro type name with an underscore.

none

Does not adjust the names, even when non-Avro compliant characters are detected.

In prior releases, Debezium always defaulted to the safe value of avro; however, starting with Debezium 2.0.0.CR1 the default value will now be none. We believe that given that the use of Avro serialization is something opted in by users based on their needs, this option should align with the same opt-in behavior.

The safe upgrade path would be to adjust your configuration and explicitly use schema.name.adjustment.mode as avro and use the default for new connector deployments. But you can also review your topic names and configurations, checking that no underscore substitutions are happening and ergo this change will have no impact.

MongoDB 6.0 - before state support

MongoDB 6 supports capturing the state of the document before the change is applied. This has long since been a feature that has been available only to the relational-based connectors, but this now enables Debezium to also include the before field as part of the event’s payload for MongoDB.

To enable this new MongoDB 6+ behavior, the capture.mode setting has been adjusted to include two new values:

change_streams_with_pre_image

The change event will also contain the full document from before the change as well as the final state of the document fields that were changed as a part of the change event.

change_streams_update_full_with_pre_image

When an update occurs, not only will the full document be present to represent the current state after the update, but the event will also contain the full document from before the change as well.

The MongoDB before field behavior is only available on MongoDB 6 or later. If you are using a version of MongoDB before 6.0, the before field is omitted from the event output, even if configured.

Other fixes & improvements

There are many bugfixes and stability changes in this release, some noteworthy are:

  • Implement retries for Debezium embedded engine DBZ-4629

  • Traditional snapshot process setting source.ts_ms DBZ-5591

  • Upgrade Kafka client to 3.3.1 DBZ-5600

  • Support READ ONLY/ENCRYPTION options for alter database statment DBZ-5622

  • Clarify semantics of include/exclude options DBZ-5625

  • Added support for Mongo pre-image in change stream DBZ-5628

  • Support for using any expression in kill statements DBZ-5636

  • Debezium Db2 Connector fails to handle default values in schema when is making the snapshot DBZ-4990

  • Oracle connector parsing SELECT_LOB_LOCATOR event missing constant unavailable.value.placeholder DBZ-5581

  • Starting Embedded Engine swallows ClassNotFoundException so user cannot see why engine does not work https://issues.redhat.com/browse/DBZ-5583[DBZ-558

  • Hardcoded driver task properties are not being passed to underlying connections DBZ-5670

  • MongoDB Connector with DocumentDB errors with "{$natural: -1} is not supported" DBZ-5677

  • Upgrade apicurio to 2.2.5.Final DBZ-5549

  • Upgrade binary log client to 0.27.2 DBZ-5620

Altogether, a total of 53 issues were fixed for this release.

What’s next?

With the release of Debezium 2.0 CR1, the release of 2.0.0.Final is just around the corner. The community should expect the Final release soon, barring any bug reports. In addition, we are also working on wrapping up the last installation of the 1.9 release stream, 1.9.7.Final which should will be released toward the end of this month.

With the holiday season fast approaching, we will soon begin work on Debezium 2.1. We do intend to have a normal release cycle this quarter despite being behind on Debezium 2.0, so expect that sometime just before the end of the year.

In the meantime, happy capturing!

Chris Cranford

Chris is a software engineer at Red Hat. He previously was a member of the Hibernate ORM team and now works on Debezium. He lives in North Carolina just a few hours from Red Hat towers.

   


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 Zulip, 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.