赶在节日季,我很高兴宣布 Debezium 3 的第五个维护版本,**3.0.5.Final**。此版本引入了若干小的改进、错误修复和一些重大更改。让我们花点时间深入了解细节…
重大变更
新功能和改进
Debezium 3.0.5.Final 引入了几个改进和功能,让我们逐一来看。
核心
允许对未知表的临时阻塞快照
虽然我们建议为所有表使用默认的模式管理配置,但我们理解在每个环境中并非总是可行。我们经常看到一个常见问题是如何快照新添加的表,尤其是在配置连接器时使用了 store.only.captured.tables.ddl 为 true。
在此更新中,我们简化了流程,您可以更新连接器配置以包含新表,一旦连接器任务重启,即使是对未知但符合捕获过滤器的表,也将允许发送临时阻塞快照信号(DBZ-4903)。
快照分发失败处理改进
在处理变更事件时,用户可以使用 event.processing.failure.handling.mode 控制连接器如何应对特定的事件处理失败;然而,这传统上只适用于流式变更。
在一些极端情况下,发出快照事件也可能引发失败。为了改善这种体验,event.processing.failure.handling.mode 现在也影响分发快照事件时的失败(DBZ-8433)。
连接器启动配置日志记录改进
当 Debezium 源连接器启动时,它会记录所有连接器配置。这对于团队诊断问题和用户确认其配置被正确理解都非常有帮助。
在此更新中,连接器配置的日志记录略有改变。您会注意到,不再将每个配置属性作为新的日志条目,而是将每个键/值行连接在一起,用换行符分隔,并作为单个条目添加到日志中。这样更容易识别这些日志行,也方便工具在需要时排除这些日志条目(DBZ-8472)。
Postgres
支持 PostgreSQL 17 故障转移复制槽
PostgreSQL 17 引入了一个备受期待的功能,称为复制槽故障转移。
创建复制槽时,可以指定一个新属性,使复制槽能在故障转移副本上创建并可用。故障转移复制槽的同步可以手动调用 pg_sync_replication_slots() 来执行,或者通过启用 sync_replication_slots 功能自动执行。
当自动同步启用后,这允许 Debezium 在故障转移到副本时立即从该槽消费,而不会错过任何事件。
要利用此新功能,您的连接器必须配置为 slot.failover 设置为 true。Debezium 必须连接到 PostgreSQL 17+ 并连接到集群的主节点,否则将不会创建故障转移复制槽(DBZ-8412)。
Oracle
新的指标用于跟踪部分回滚事件
部分回滚事件是 Oracle 特有的,用户执行一个操作,该操作在事务日志中被记录,但随后一个验证检查强制该操作被撤销和回滚。引发部分回滚的最明显方式之一是约束冲突。
新的 JMX 指标 NumberOfPartialRollbackCount 跟踪事务日志中该事件序列的频率(DBZ-8491)。
| 此指标的增加应该很少见,并且一天有几次发生通常不会造成重大问题。 当您注意到此指标在很短的时间内频繁增加时,这意味着您可能有一个写得不好的脚本,其中一个作业依赖于约束冲突来进行某些逻辑判断。虽然连接器可以处理这些用例,但重要的是要理解这会产生不必要的事务日志活动,从而直接影响变更流的速度和延迟。 |
跳过 GoldenGate 复制标记
当使用 Debezium 从与 Oracle GoldenGate 交互的 Oracle 数据库捕获更改时,您可能会遇到一些情况,即在重启后,偏移量中的低水位标记没有前进。当 lob.enabled 设置为 true 时尤其如此。
在此更新中,Debezium Oracle 连接器将跳过 GoldenGate 的复制标记事件,这将防止这些合成事务弄乱事务缓冲区并迫使用户依赖事务保留(DBZ-8533)。
Vitess
无法解析的 DDL 处理改进
Vitess 中添加了若干新改进,以使 DDL 更改的解析和处理更加容错(DBZ-8479)。这些改进包括:
-
仅当该特定表在 schema history 中被跟踪时才解析 DDL 事件
-
删除注释以模拟解析失败
-
使表和类型容错,以优雅地处理边缘情况
K8s Operator
支持 JDBC offset/history 配置 DBZ-8501
我们改进了 Kubernetes Operator,引入了对 JDBC 存储模块的支持,允许通过 CRD 进行配置。
在offset schema reference 中,添加了一个名为 jdbc 的新属性部分,它描述了JDBC 偏移量后备存储属性。在schema history reference 中,添加了一个名为 jdbc 的新属性部分,它描述了JDBC schema history 存储属性。
这使用户可以轻松地将使用 Debezium Operator 部署的连接器的偏移量和 schema history 详细信息存储在 JDBC 数据存储中(DBZ-8501)。
其他修复
以下是一些值得注意的更改
-
创建冒烟测试以确保 Debezium Server 容器镜像正常工作 DBZ-3226
-
debezium.sink.pulsar.client.serviceUrl 和 debezium-server 的错误 DBZ-3720
-
MySQL 回归 - 默认 store.only.captured.tables.ddl 为 true DBZ-6709
-
ExtractNewRecordState 的可选 null 字段值(有默认值) DBZ-7094
-
DebeziumException: No column '' where ' found in table DBZ-8034
-
将 MySQL 和 MariaDB 的语法与上游版本保持一致 DBZ-8270
-
MySQL 连接器不处理 Binlog 中的
CREATE DATABASE记录 DBZ-8291 -
当使用多个任务时,Vgtid 不包含多个分片 GTID DBZ-8432
-
支持 MongoDB 8.0 DBZ-8451
-
更新
message.key.columns的描述,并格式化 PG 文档中的 admonition DBZ-8455 -
Object ID 缓存可能因并发修改异常而失败 DBZ-8465
-
在 UI 中添加基本验证,以在提交前检查表单是否完整。 DBZ-8474
-
使用 Schema Evolution 工具管理 conductor 数据库 DBZ-8486
-
Oracle 不必要地收集和记录视图的对象属性 DBZ-8492
-
ReselectColumnPostProcessor 在使用回退非闪回区域查询时可能抛出 ORA-01003 "no statement parsed" 错误 DBZ-8493
-
Oracle DDL ALTER TABLE ADD CONSTRAINT 解析失败 DBZ-8494
-
编辑 Source/Destination 时添加新配置属性会删除旧属性 DBZ-8495
-
JDBC Schema History 中的属性名称无效 DBZ-8500
-
修复 Pipeline 日志页面中的 URL DBZ-8502
-
由于 "Required Start SCN" 错误消息,LogMiner 挖掘会话启动失败 DBZ-8503
-
Oracle 数据泵 TEMPLATE_TABLE 子句不支持 DBZ-8504
-
Postgres alpine 镜像需要 lang/llvm 19 进行构建 DBZ-8505
-
将 Quarkus Outbox 扩展更新到 Quarkus 3.17.3 DBZ-8506
-
将 conductor 和 stage 合并到单个平台仓库 DBZ-8508
-
如果设置了 TimezoneConverter include.list,则应尊重该列表 DBZ-8514
-
debezium-platform-conductor 中缺少日志类 DBZ-8515
-
Debezium Server 在使用 sink Kinesis 时启动失败 DBZ-8517
-
跳过 GoldenGate REPLICATION MARKER 事件 DBZ-8533
非常感谢社区中为本次发布辛勤付出的所有贡献者:Andrei Leibovski、Anisha Mohanty、Chris Cranford、Fan Yang、Giovanni Panice、Gunnar Morling、Gustavo Lira、Jakub Cechacek、Jean Vintache、Jiri Pechanec、Jose Carvajal Hilario、Juanma Barea、Mario Fiore Vitale、Martin Walsh、Nathan Smit、Ole-Martin Bratteng、Robert Roldan、Thomas Thornton 和 Vojtech Juranek!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。