自我们发布 Debezium 2.3 的第一个版本以来已经过去了几周,我很高兴地宣布 Debezium 2.3 的下一个迭代版本,即 2.3.1.Final。与任何微版本一样,重点是稳定性和错误修复,以及文档调整;然而,有一些值得注意的更改,我想花点时间重点介绍一下。
新功能
虽然微发布通常不包含新功能,但在某些情况下,将新功能移植到较早版本是有意义的,特别是当更改是局部的、经过充分测试的,并且我们有信心它将为使用稳定版本的社区带来巨大好处时。有四个主要的新功能:
错误处理改进
在早期版本中,连接器配置属性 errors.max.retries 仅存在于 SQL Server 连接器中,用于控制特定连接释放失败时的错误处理行为。简而言之,此属性允许连接相关的失败最多重试配置的次数,然后 Debezium 才会硬性失败。随着 2.3.1.Final 的发布,我们统一了此配置选项,现在所有连接器都可以使用它。
此设置在使用 Debezium 时非常有用,特别是在非 Kafka Connect 环境中,或者当您可能已配置 Kafka Connect 不允许重试/回退,但您希望在 Debezium 源连接器部署中实现此类行为时。(DBZ-6573)
JDBC sink 不应摄取 schema 变更主题
JDBC sink 连接器从未设计用于摄取 schema 变更主题中的事件;然而,连接器应该具有弹性,并提供充分的消息,而不是出现表明配置错误的异常。
从这个微发布开始,JDBC sink 连接器将更详细地分析事件,如果我们确定事件是 schema 变更,连接器将提供一个描述性的警告,说明问题并要求调整配置以避免摄取 schema 变更主题。我们希望这种清晰度能够解决因忽略配置错误而导致令人困惑的异常的情况,并提供直接的解决方案。(DBZ-6655)
MongoDB SRV 支持
MongoDB SRV 支持是 MongoDB 连接器功能集中的一个新功能;然而,作为 DBZ-6701 的一部分,我们发现 Debezium Server 无法处理 MongoDB SRV 连接字符串。我们发现问题与 Quarkus 默认禁用 JNDI 有关,这导致 MongoDB 驱动程序在处理 SRV 连接字符串时出现问题。
在此次微发布中,此问题已在 Debezium 2.3 中得到解决。我们在构建 Debezium Server 时专门启用了 JNDI,这现在允许 MongoDB SRV 连接字符串正常工作。非常感谢社区帮助团队诊断此 bug!
Cassandra 不再跳过带有 DELETE 的批次
Cassandra 连接器在批处理操作中遇到了一个相当关键的回归。假设从 Cassandra 提交日志中观察到以下情况:
BEGIN BATCH
DELETE FROM ...
INSERT INTO ...
INSERT INTO ...
APPLY BATCH 问题(DBZ-6576)在于这个特定的批次被错误地解释了,结果,接下来的两个 INSERT 操作被从连接器的事件流中省略了。感谢社区的努力,一个补丁已应用并包含在 Debezium 2.3.1.Final 中,现在这种情况已不再发生,Debezium 变更事件流将包含 DELETE 以及所有后续事件。
其他更改
Debezium 2.3.1.Final 还包含大量的错误修复和稳定性改进,详见下文:
-
Oracle 不支持的 DDL 语句 - drop multiple partitions DBZ-6585
-
仅支持 Struct 对象用于 [Header field insertion],找到:null DBZ-6588
-
MySQL 解析器无法解析 CAST AS dec DBZ-6590
-
重构 Redis schema history 中的重试处理 DBZ-6594
-
过多的日志消息“Marking Processed Record for Topic” DBZ-6597
-
Oracle DDL 解析器在注释混淆分号时无法正确检测语句结束 DBZ-6599
-
已修复 DataCollections 以用于表扫描完成通知 DBZ-6605
-
如果 ORA-01327 被另一个 JDBC 或 Oracle 异常包装,Oracle 连接器将无法恢复 DBZ-6610
-
解析 Mysql (Percona 5.7.39-42) 过程时出现致命错误 DBZ-6613
-
MySQL ALTER USER with RETAIN CURRENT PASSWORD 在解析异常时失败 DBZ-6622
-
关于 additional-condition 的文档不准确 DBZ-6628
-
Oracle 连接 SQLRecoverableExceptions 默认不重试 DBZ-6633
-
当 Debezium Mongodb 连接器遇到身份验证或权限不足错误时,debezium 和 mongodb 之间的连接将持续有效。DBZ-6643
-
无法删除非空间隔值 DBZ-6648
-
Debezium 2.3 中的 ConcurrentModificationException DBZ-6650
-
Dbz 在解析 Mysql 存储过程代码 (Statement Labels) 时崩溃 DBZ-6651
-
Vitess:如果表名是 mysql 保留字,连接器会失败 DBZ-6656
-
可重试操作会无限重试,因为错误处理程序未被重用 DBZ-6670
-
NotificationIT with Oracle xstream 随机失败 DBZ-6672
-
不稳定的 Oracle 测试:shouldCaptureChangesForTransactionsAcrossSnapshotBoundaryWithoutReemittingDDLChanges DBZ-6673
-
Oracle DDL 解析器不支持 ALTER TABLE 上的列可见性 DBZ-6677
-
Debezium Server 中 MongoDB SRV 协议不起作用 DBZ-6701
-
在 UI 安装 Dockerfile 中添加 tzdata-java DBZ-6713
请参阅 发布说明 了解所有已修复的 bug、更新程序等信息。
非常感谢社区中以下为 Debezium 2.3.1.Final 做出贡献的个人:Andrei Isac、Anil Dasari、Anisha Mohanty、Ant Kutschera、Artur Gukasian、Balint Bene、Bob Roldan、Chris Cranford、David Beck、Harvey Yue、Indra Shukla、Jakub Cechacek、Jiri Pechanec、Katerina Galieva、Mario Fiore Vitale、Ondrej Babec、René Kerner、Seo Jae-kwon、Stefan Miklosovic 和 Vojtech Juranek!
展望和下一步?
Debezium 2.3 将在本季度继续收到维护更新,下一个更新将在八月初/中期发布,并可能在八月下旬和九月进行额外的后续跟进,所有这些都将根据社区对回归的反馈进行调整。
目前,团队正在并行积极开发 Debezium 2.4,我预计最早在八月初会看到 Alpha2 版本。我们为 Debezium 2.4 规划了许多新功能,因此我敦促您查看我们的 路线图 以获取更多详细信息。
我将在下周就新的、即将举行的 Debezium 社区活动进行正式公告。这将由 Debezium 团队主办,为团队、贡献者和社区提供一个可以公开协作的空间。我将在下周提供更多细节,敬请关注!
最后,Current 2023(又名 Kafka Summit)即将到来。今年的活动将于 9 月 26 日和 27 日在加利福尼亚州圣何塞举行。如果您计划参加,请给我发送电子邮件。我很乐意有机会与社区交流,并收集您对 Debezium 的反馈以及我们如何进一步改进!
在那之前…
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。