While the team has been hard at work on Debezium 3.1, we’re pleased to announce a new maintenance update for Debezium 3.0.8.Final.

While our maintenance releases often focus primarily on stability improvements, we are happy to share that we’ve also included some new features in this maintenance release to improve the overall user experience.

Breaking changes

With any new major release of software, there is often several breaking changes; however, we generally prefer to avoid these with maintenance releases if possible. Unfortunately, Debezium 3.0.8.Final is one of those exceptions where we have introduced some breaking changes.

Sparse vector logical type renamed

The PostgreSQL extension vector (aka pgvector) provides an implementation of a variety of vector data types, including one called sparsevec. A sparse vector is one that stores only the populated key/value entries within the vector, excluding those that aren’t set to minimize the space used to represent the data set.

Debezium 3.0 introduced the SparseVector logical type named io.debezium.data.SparseVector. As we began to evaluate implementations for other relational databases, we determined that the logical name was insufficient when we began to implement other sparse vector types (DBZ-8585).

With Debezium 3.1 and 3.0.8.Final, we have repackaged the io.debezium.data.SparseVector class from the PostgreSQL connector into Debezium’s core package, we’ve also renamed the class to SparseDoubleVector, and changed the logical name to io.debezium.data.SparseDoubleVector to align with the class name changes.

For those who may have been working with SparseVector logical types, you may need to adjust your code to recognize the new logical type name.

Changes to schema history configuration defaults

The documentation for schema.history.internal.store.only.captured.databases.ddl provided an incorrect default value. While this is not a code-specific breaking change, you should take a moment and reevaluate whether your deployment’s configuration depends on the different default value or not (DBZ-8558).

Potential Vitess data loss

The Debezium for Vitess connector had a rare but critical data loss bug that has existed since it was first introduced five years ago. If a primary key update is the last operation in a transaction, records may be lost. This bug affects all prior versions. It is highly recommended that users perform an immediate update to 3.0.8.Final or 3.1.0.Alpha2 or later to remedy this potential data loss (DBZ-8594).

Reselect column post processor behavior changed for Oracle

The ReselectColumnsPostProcessor behavior has changed and Oracle LOB columns will be reselected regardless of the lob.enabled configuration property’s value. This change enables users who may not want to mine LOB columns while streaming to still populate the LOB column using the column reselection process as an alternative (DBZ-8653).

New features and improvements

THe upgrade to Debezium 3.0.8.Final introduces some new features for several components.

SSL connectivity with MariaDB

Users may have found that SSL connectivity was not working in prior versions of Debezium when capturing changes from MariaDB. We are pleased to report that this has been fixed, and users should be able to use MariaDB with SSL connections (DBZ-8482).

While the same configuration property, database.ssl.mode can be used, MariaDB uses different values to represent the negotiation steps taken between the driver and database. The following table outlines the MariaDB settings.

SSL Mode Description / Purpose

disabled

Specifies that the JDBC driver should not attempt to negotiate an SSL connection with the database server. If the database server requires a secure connection, the connection will be refused.

trust

Specifies that the JDBC driver should use SSL/TLS for data encryption purposes, and that the certificate and hostname won’t be verified.

verify-ca

Works identify to the trust mode, but also performs certificate verification, but does not verify the hostname.

verify-full

Works just like verify-ca, but it also performs hostname verification. This is the standard behavior for TLS.

Debezium defaults to using disabled as the SSL mode.

MariaDB 11.4 or later defaults to using SSL connections, so you will need to set an appropriate database.ssl.mode or disable MariaDB’s use of SSL connectivity.

Other changes

The following are some noteworthy changes in 3.0.8.Final:

  • Align MySQL and MariaDB grammars with upstream versions (DBZ-8270)

  • JDBC sink connector doesn’t delete rows from a postgres db table (DBZ-8287)

  • MariaDB adapter fails on an ALTER USER statement (DBZ-8436)

  • Expressions cause SQL parser exception in Percona SEQUENCE_TABLE function (DBZ-8559)

  • MongoDataConverter does not recognize nested empty array (DBZ-8572)

  • ORA-65040 occurs on log switches when log.mining.restart.connection is enabled and connection defaults to PDB rather than CDB$ROOT (DBZ-8577)

  • Reduced record buffer doesn’t handle RECORD_VALUE with primary key fields (DBZ-8593)

  • Events for tables with generated columns fail when using hybrid mining strategy (DBZ-8597)

  • ANTLR DDL Parsing error (DBZ-8600)

  • Update Debezium Server and Operator to Quarkus 3.15.3 LTS (DBZ-8601)

  • Remove misleading log entry about undo change failure (DBZ-8645)

  • Oracle metric OldestScnAgeInMilliseconds does not account for database timezone (DBZ-8646)

  • Using RECORD_VALUE with a DELETE event causes NullPointerException (DBZ-8648)

  • Batch size calculation is incorrectly using min-batch-size (DBZ-8652)

  • Oracle performance drop when transaction contains many constraint violations (DBZ-8665)

  • Skip empty transactions with commit with redo thread equal to 0 (DBZ-8681)

  • DDL statement couldn’t be parsed: GRANT SENSITIVE_VARIABLES_OBSERVER (DBZ-8685)

  • Column scale is reset when a column’s type is not changed during an ALTER TABLE (DBZ-8700)

  • Alter table modify column fails when using DEFAULT ON NULL clause (DBZ-8720)

  • ExtractChangedRecordState SMT Now Working With Default Values (DBZ-8721)

  • Restart of Oracle RAC node leads to redo thread being inconsistent indefinitely (DBZ-8724)

  • Specifying archive.log.hours with non-zero value generates bad SQL (DBZ-8725)

  • debezium/connect docker image is not available on arm64 (DBZ-8728)

  • Unknown DDL ALTER INDEX <name> IGNORED (DBZ-8741)

  • Possibly broken schema.history.internal.skip.unparseable.ddl for MariaDB (DBZ-8745)

  • Oracle snapshot’s source.ts does not account for database zone differences (DBZ-8749)

In total, 35 issues were resolved in Debezium 3.0.8.Final. The list of changes can also be found in our release notes.

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.