|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: Debezium 3.5.0.Alpha1 Released |
| 4 | +date: 2026-01-20 |
| 5 | +tags: [ releases, mongodb, mysql, mariadb, postgres, sqlserver, cassandra, oracle, db2, vitess, outbox, spanner, jdbc, informix, ibmi, cockroachdb ] |
| 6 | +author: ccranfor |
| 7 | +extraClasses: release-v2 |
| 8 | +--- |
| 9 | + |
| 10 | +As we begin a new year, the Debezium team is pleased to announce a new release stream for Debezium, **3.5.0.Alpha1**. |
| 11 | +This release includes a variety of first pass improvements and changes across the portfolio, including performance optimizations for Db2, updates to Debezium's Quarkus extensions, Debezium Server and Platform. |
| 12 | + |
| 13 | ++++<!-- more -->+++ |
| 14 | + |
| 15 | +Let's take a few moments to dive into all the details. |
| 16 | + |
| 17 | +[id="new-features-and-improvements"] |
| 18 | +== New features and improvements |
| 19 | + |
| 20 | +=== Debezium for Db2 |
| 21 | + |
| 22 | +==== Control maximum timespan for change query |
| 23 | + |
| 24 | +When reading the changes in a very active database with a large numbers of records, this can trigger query-resource limits such as CPU time. |
| 25 | +This can lead to the query being terminated prematurely, leading to a connector crash. |
| 26 | + |
| 27 | +To address this concern, Debezium's Db2 connector introduces a new `straeming.query.timestamp.seconds` configuration property. |
| 28 | +The default of `0` does not apply any timestamp restriction on the query, so it will continue to operate as it does today. |
| 29 | +So for most users, this is a net-zero change (https://github.com/debezium/dbz/issues/1466[debezium/dbz#1466]). |
| 30 | + |
| 31 | +For environments where query-resource limits are an issue, setting this value to anything greater than `1` specifies the maximum number of seconds for a streaming query to include changes for, noting that a value of `1` is not permitted. |
| 32 | +It's recommended for most environments that require this behavior to start with `120` seconds and adjust as needed. |
| 33 | + |
| 34 | +=== Debezium for MySQL |
| 35 | + |
| 36 | +==== No longer fails for `zero-year` dates |
| 37 | + |
| 38 | +MySQL can be configured to support the storage of dates using zero year format, e.g. `0000-07-15`. |
| 39 | +When such values are stored in the database, the MySQL Binlog Client will fail with an invalid date/time exception, which will block the connector from consuming further changes. |
| 40 | + |
| 41 | +Debezium will now allow zero-year values at the Binlog Client level to be passed to the Debezium MySQL connector without issue (https://github.com/debezium/dbz/issues/1499[debezium/dbz#1499]). |
| 42 | + |
| 43 | +=== Debezium for Oracle |
| 44 | + |
| 45 | +==== Dynamic Archive Destination Support |
| 46 | + |
| 47 | +When an Oracle primary server fails over to a standby server, it's very likely that Debezium has not read all the changes from the transaction logs on the primary when the failover occurs. |
| 48 | +As a result, when the standby is promoted to the primary, it will begin to write changes to a new archive destination. |
| 49 | + |
| 50 | +When Debezium reconnects to the newly promoted primary, Debezium will attempt to locate where it left off, and fail to start. |
| 51 | +This failure to start issue is a result of the fact that the primary changes that were not consumed by Debezium exist in the archive destination specific to the standby system being in standby-mode, not primary-mode. |
| 52 | + |
| 53 | +To solve this issue, the `archive.destination.name` configuration property can be supplied a series of comma-separated archive destination names. |
| 54 | +When multiple names are supplied, Debezium will gather logs across all configured destinations and perform a deduplication pass by redo thread and log sequence pairs. |
| 55 | +This deduplication pass will prefer logs in earlier destinations from logs in later destinations that have the same thread and sequence pair. |
| 56 | + |
| 57 | +With this change, Debezium is significantly more fault-tolerant during a primary to standby failover and recovers without the need for a snapshot, as long as there is no data loss at the transaction log level between the two systems (https://github.com/debezium/dbz/issues/1246[debezium/dbz#1246]). |
| 58 | + |
| 59 | +=== Debezium Quarkus Extensions |
| 60 | + |
| 61 | +==== Extensions relocated |
| 62 | + |
| 63 | +One of the biggest changes in Debezium 3.5 is the relocation of the Debezium Quarkus extensions, which includes both the connector and outbox extensions. |
| 64 | +All of Debezium's Quarkus-related modules are now found in the https://github.com/debezium/debezium-quarkus[Debezium Quarkus] repository. |
| 65 | + |
| 66 | +[IMPORTANT] |
| 67 | +==== |
| 68 | +All artifacts previously released in Debezium 3.4 using the `quarkus-debezium-XYZ` naming convention have been renamed. |
| 69 | +Please be sure to update your dependencies to reflect the artifacts named as `debezium-quarkus-XYZ`. |
| 70 | +The dependency `groupId` was unchanged. |
| 71 | +==== |
| 72 | + |
| 73 | +[NOTE] |
| 74 | +==== |
| 75 | +In a future build, the Debezium Quarkus Extensions will be unbundled from the main Debezium release pipeline, and instead will be released with a similar cadence to the upstream https://quarkus.io[Quarkus] project. |
| 76 | +This will provide an improved parity between extension changes and Quarkus releases. |
| 77 | +==== |
| 78 | + |
| 79 | +==== Support for Db2 |
| 80 | + |
| 81 | +The Debezium Quarkus extensions also now include an implementation for Debezium's Db2 connector (https://github.com/debezium/dbz/issues/1447[debezium/dbz#1447]). |
| 82 | +In a Quarkus application that uses Db2, developers can now respond to real-time changes by simply including the new Db2 module: |
| 83 | + |
| 84 | +.Debezium Db2 extension maven coordinates |
| 85 | +[source,xml] |
| 86 | +---- |
| 87 | +<dependency> |
| 88 | + <groupId>io.debezium.quarkus</groupId> |
| 89 | + <artifactId>debezium-quarkus-db2</artifactId> |
| 90 | + <version>v3.5.0.Alpha1</version> |
| 91 | +</dependency> |
| 92 | +---- |
| 93 | + |
| 94 | +==== JBang Support |
| 95 | + |
| 96 | +Debezium introduces JBang support by introducing an easy way to integrate Debezium's Quarkus extensions (https://github.com/debezium/dbz/issues/1464[debezium/dbz#1464]). |
| 97 | +This support requires Java 21 or later, JBang 0.132.1 or later, and a containerized environment for local services. |
| 98 | + |
| 99 | +To get started quickly, the https://github.com/debezium/jbang-catalog[Debezium JBang catalog] needs to be added. |
| 100 | + |
| 101 | +++++ |
| 102 | +<script src="https://asciinema.org/a/770262.js" id="asciicast-770262" async="true"></script> |
| 103 | +++++ |
| 104 | + |
| 105 | +There are templates available for the following data sources: `postgres`, `mysql`, `mongodb`, `sqlserver`, `mariadb`. |
| 106 | +There will be additional data sources added over time. |
| 107 | + |
| 108 | +=== Debezium Platform |
| 109 | + |
| 110 | +==== Support for HTTPS-based URLs |
| 111 | + |
| 112 | +Users who may be using HTTPS via Traefik, ALB, or similar tooling, the current Helm chart setup lead to a series of errors when using secure connections. |
| 113 | +To provide TLS-based connectivity, the following configuration options were introduced (https://github.com/debezium/dbz/issues/36[debezium/dbz#36]): |
| 114 | + |
| 115 | +.New Helm charts configuration properties |
| 116 | +[cols="30%,70%,20%"] |
| 117 | +|=== |
| 118 | +|Property |Description |Default |
| 119 | + |
| 120 | +|`domain.name` |
| 121 | +|Represents the domain used as ingress host |
| 122 | +|`""` |
| 123 | + |
| 124 | +|`ingress.enabled` |
| 125 | +|Enable ingress resource for conductor/stage |
| 126 | +|`true` |
| 127 | + |
| 128 | +|`ingress.className` |
| 129 | +|Optional ingress class name |
| 130 | +|`"""` |
| 131 | + |
| 132 | +|`ingress.annotations` |
| 133 | +|Extra ingress annotations |
| 134 | +|`{}` |
| 135 | + |
| 136 | +|`ingress.tls.enabled` |
| 137 | +|Enable TLS section on ingress |
| 138 | +|`false` |
| 139 | + |
| 140 | +|`ingress.tls.secretName` |
| 141 | +|Secret name used when TLS is enabled |
| 142 | +|`""` |
| 143 | + |
| 144 | +|=== |
| 145 | + |
| 146 | +There are also some deprecated configuration properties. |
| 147 | + |
| 148 | +.Deprecated Helm charts configuration properties |
| 149 | +[cols="30%,70%,20%"] |
| 150 | +|=== |
| 151 | +|Property |Description |Default |
| 152 | + |
| 153 | +|`domain.url` |
| 154 | +|This was replaced by `domain.name` |
| 155 | +|`""` |
| 156 | + |
| 157 | +|=== |
| 158 | + |
| 159 | +=== Debezium Server |
| 160 | + |
| 161 | +==== Jetstream retries on failures |
| 162 | + |
| 163 | +Currently, when Debezium Server publishes to NATS and the queue is full due to some limitations like message or byte limits, Debezium Server currently throws an exception and terminates. |
| 164 | +In order to make integration with NATs more fault tolerant, the following additional configuration options have been introduced, allowing the Jetstream NATS adapter to handle retries natively (https://github.com/debezium/dbz/issues/1494[debezium/dbz#1494]): |
| 165 | + |
| 166 | +.New configuration property for NATS Jetstream adapter |
| 167 | +[cols="30%,70%,20%"] |
| 168 | +|=== |
| 169 | +|Property |Description |Default |
| 170 | + |
| 171 | +|`sync.retries` |
| 172 | +|Specifies the number of retries |
| 173 | +|`5` |
| 174 | + |
| 175 | +|`sync.retry.interval.ms` |
| 176 | +|The number of milliseconds to wait between retries. |
| 177 | +|`1000` |
| 178 | + |
| 179 | +|`sync.retry.max.interval.ms` |
| 180 | +|The maximum number of milliseconds to wait between retries. |
| 181 | +|`60000` |
| 182 | + |
| 183 | +|`sync.retry.backoff.multiplier` |
| 184 | +|The back-off multiplier to scale the retry interval over attempts. |
| 185 | +|`2.0` |
| 186 | + |
| 187 | +|=== |
| 188 | + |
| 189 | +[NOTE] |
| 190 | +==== |
| 191 | +All configuration options should be prefixed with `debezium.sink.nats-jetstream`. |
| 192 | +==== |
| 193 | + |
| 194 | +[id="other-changes"] |
| 195 | +== Other changes |
| 196 | + |
| 197 | +* Recovery private redo threads can lead to LogMiner failures https://github.com/debezium/dbz/issues/40[debezium/dbz#40] |
| 198 | +* On adding "Signalling collection name" in the Form editor it should by preserved in the smart editor [DBZ-9080] https://github.com/debezium/dbz/issues/1226[debezium/dbz#1226] |
| 199 | +* Update Debezium Platform doc with recent features [DBZ-9319] https://github.com/debezium/dbz/issues/1381[debezium/dbz#1381] |
| 200 | +* Platform: UI Bugs [DBZ-9559] https://github.com/debezium/dbz/issues/1416[debezium/dbz#1416] |
| 201 | +* Deleting pipeline does not work when pressing enter after typing name [DBZ-9687] https://github.com/debezium/dbz/issues/1436[debezium/dbz#1436] |
| 202 | +* Oracle connector fails when user creates a table with a column named "override" https://github.com/debezium/dbz/issues/1461[debezium/dbz#1461] |
| 203 | +* Debezium-Platform: Fix The grep notification feature in the pipeline logs https://github.com/debezium/dbz/issues/1465[debezium/dbz#1465] |
| 204 | +* remove unnecessary jbang main() https://github.com/debezium/dbz/issues/1467[debezium/dbz#1467] |
| 205 | +* introduce a factory for `io.debezium.runtime.Debezium` https://github.com/debezium/dbz/issues/1469[debezium/dbz#1469] |
| 206 | +* Debezium Server: HTTP sink, JWTAuthenticatorTests fail https://github.com/debezium/dbz/issues/1470[debezium/dbz#1470] |
| 207 | +* Debezium issue on connect to IBMi https://github.com/debezium/dbz/issues/1473[debezium/dbz#1473] |
| 208 | +* Oracle OLR adapter crashes with auto-commit error when encountering unknown tables https://github.com/debezium/dbz/issues/1480[debezium/dbz#1480] |
| 209 | +* Impossible to run docker image for testing purpose with `docker-maven-plugin` and docker API version > `1.44` https://github.com/debezium/dbz/issues/1481[debezium/dbz#1481] |
| 210 | +* Cassandra connector return wrong value for DATE columns https://github.com/debezium/dbz/issues/1486[debezium/dbz#1486] |
| 211 | +* RedisOffsetBackingStore: Race condition causes infinite NullPointerException loop on reconnect leading to unrecoverable state https://github.com/debezium/dbz/issues/1488[debezium/dbz#1488] |
| 212 | +* pg_stat_replication.flush_lsn can move backwards when lsn.flush.mode=connector_and_driver https://github.com/debezium/dbz/issues/1489[debezium/dbz#1489] |
| 213 | +* JDBC Sink Connector fails to insert JSON data into MariaDB https://github.com/debezium/dbz/issues/1492[debezium/dbz#1492] |
| 214 | +* Refactor OracleConnection auto-commit setup as an initial Operation https://github.com/debezium/dbz/issues/1496[debezium/dbz#1496] |
| 215 | +* Connector cannot handle uncompressed transaction payloads beyond 2GB https://github.com/debezium/dbz/issues/1503[debezium/dbz#1503] |
| 216 | +* MySQL: New charset not taken into account https://github.com/debezium/dbz/issues/1504[debezium/dbz#1504] |
| 217 | +* Debezium Platrform: Update the source and destination flow to get the connections details in smart editor. https://github.com/debezium/dbz/issues/1506[debezium/dbz#1506] |
| 218 | +* add `debezium-quarkus` project in `debezium-platform-conductor` pipeline https://github.com/debezium/dbz/issues/1507[debezium/dbz#1507] |
| 219 | +* Add debezium platform conductor into core CI https://github.com/debezium/dbz/issues/1520[debezium/dbz#1520] |
| 220 | +* DCO must be checked only on pull request https://github.com/debezium/dbz/issues/1524[debezium/dbz#1524] |
| 221 | +* ReselectPostProcessor does not account for CustomConverter(s) https://github.com/debezium/dbz/issues/1527[debezium/dbz#1527] |
| 222 | +* Thread-safety issue in MongoDB connector causes incorrect source.collection metadata during parallel snapshot https://github.com/debezium/dbz/issues/1531[debezium/dbz#1531] |
| 223 | + |
| 224 | +== Summary |
| 225 | + |
| 226 | +In total, https://github.com/orgs/debezium/projects/5/views/6?query=sort%3Aupdated-desc+is%3Aopen&filterQuery=status%3AReleased+iteration%3A3.5.0.Alpha1[44 issues] were resolved in Debezium 3.5.0.Alpha1. |
| 227 | +The list of changes can also be found in our https://debezium.io/releases/3.4[release notes]. |
| 228 | + |
| 229 | +A big thank you to all the contributors from the community who worked diligently on this release: |
| 230 | + + |
| 231 | +Anton Repin, |
| 232 | +https://github.com/abusquets[Alexandre Busquets], |
| 233 | +https://github.com/atorik[Atsushi Torikoshi], |
| 234 | +https://github.com/Naros[Chris Cranford], |
| 235 | +https://github.com/cjbooms[Conor Gallagher], |
| 236 | +https://github.com/kmos[Giovanni Panice], |
| 237 | +https://github.com/haydarmiezanie[Haydar], |
| 238 | +https://github.com/haydarmiezanie[Haydar Miezanie Abdul Jamil], |
| 239 | +https://github.com/haydarmiezanie[Haydar] Miezanie Abdul Jamil, |
| 240 | +https://github.com/indraraj[Indra Shukla], |
| 241 | +https://github.com/jpechane[Jiri Pechanec], |
| 242 | +https://github.com/MV-GH[Maarten Vercruysse], |
| 243 | +https://github.com/mfvitale[Mario Fiore Vitale], |
| 244 | +https://github.com/mrtworo[Mateusz Tworek], |
| 245 | +https://github.com/mhejnas[Matt Hejnas], |
| 246 | +https://github.com/koleo[Nicolas Payart], |
| 247 | +https://github.com/ochedru[Olivier Chédru], |
| 248 | +https://github.com/rophy[Rophy Tsai], |
| 249 | +https://github.com/rudi-bruchez[Rudi Bruchez], |
| 250 | +https://github.com/SreedevT[sreedev], |
| 251 | +https://github.com/vjuranek[Vojtech Juranek] |
0 commit comments