虽然距离我们发布 Debezium 2.5 系列的第一个预览版本仅两周时间,但我很高兴地宣布下一个预览版本 Debezium 2.5.0.Alpha2 现已发布。

此版本包含多项改进,JDBC Sink 连接器的批量支持,对超过 16MB 限制的 MongoDB 文档的无缝支持,MySQL 8.2 兼容性,以及 SQL Server 的信号改进。此外,此版本还包含各种错误修复和几项重大更改。

让我们更详细地了解 Debezium 2.5.0.Alpha2 中包含的这些更改和改进;一如既往,您可以在 发行说明中找到此版本的完整更改列表。请记住,请特别注意任何可能影响您升级路径的重大更改。

重大变更

虽然我们努力避免破坏性变更,但为了朝着正确的方向发展,有些变更有时是不可避免的。本次发布包含一系列破坏性变更。

MongoDB 默认连接模式已更改

升级到 Debezium 2.5 会对 MongoDB 的默认实现进行更改。在之前的版本中,默认连接模式为 replica_set;但在 Debezium 2.5 中,此模式已更改为 sharded。如果您连接到分片集群且未显式设置连接模式;因此,依赖默认行为,您必须审查连接器配置并进行调整。(DBZ-7108

总的来说,这项更改是旨在完全移除 replica_set 模式的更大努力的一部分。升级时,请务必审查所有 MongoDB 连接器的连接器配置。

此破坏性变更将使现有的连接器偏移量失效,并在升级时默认触发新的快照。如果您不需要或不想要快照,您需要相应地调整连接器配置的 snapshot.mode

Debezium 嵌入式引擎已弃用的 API 已移除

Debezium 2.5 团队的重点之一是改善 Debezium 嵌入式引擎的体验。为此,我们抓住这次预览发布的机会,清理了嵌入式引擎的 API。

如果您使用 Debezium 嵌入式引擎并调用了 EmbeddedEngine 上先前已弃用的 API,您会发现这些方法已被移除。(DBZ-7100)推荐的后续操作是确保您正在使用 debezium-api 构件提供的 DebeziumEngine 接口。

MySQL 5.7 支持现为尽力而为

MySQL 社区宣布,MySQL 5.7 将于 2023 年 10 月底(即上个月)进入其生命周期终结 (End of Life) 阶段。这意味着 MySQL 社区不再计划为该版本的 MySQL 提供安全或错误修复补丁。

根据这一上游社区新闻,Debezium 也正在像其他供应商一样,根据这一最新消息进行调整。因此,从 Debezium 2.5 开始,我们将不再以完全的能力进行测试或支持 MySQL 5.7,即 MySQL 5.7 进入我们所谓的“尽力而为”的支持状态。(DBZ-6874

CloudEvents - 配置选项重命名

如果您目前正在使用 CloudEvents 转换器来生成符合 CloudEvents 格式的事件,那么需要注意的是,配置选项 metadata.location 已重命名为 metadata.source。您需要确保在 Debezium 2.5 及更高版本中更新连接器配置以反映此更改。(DBZ-7060

新功能和改进

Debezium 2.5 还引入了许多改进,让我们逐一查看。

JDBC Sink 批量支持

Debezium 于 2023 年 3 月作为 Debezium 2.2 的一部分首次推出了 JDBC Sink 连接器。在过去的几个月里,该连接器经历了多次迭代,以提高其稳定性、功能集和功能。Debezium 2.5 在这些工作的基础上,引入了批量写入支持。(DBZ-6317

在以前的版本中,连接器分别处理每个主题事件;然而,新的批量写入支持模式会将事件收集到存储桶中,并使用尽可能少的事务边界将这些更改写入目标系统。这一更改提高了连接器的吞吐量能力,并使与目标数据库的交互更加高效。

无缝处理 MongoDB 大型文档

Debezium 在最近的版本中对大型文档处理进行了一些更改;然而,这些更改主要集中在处理 MongoDB 4 和 5 的用例。虽然这些改进对旧版本很有帮助,但 MongoDB 社区在 MongoDB 6 中引入了一种在数据库管道级别无缝处理此问题的方法。

Debezium 2.5 的 MongoDB 连接器现在使用 MongoDB 6.0.9 中引入的 $changeStreamSplitLargeEvent 聚合功能。这可以避免在处理超出 MongoDB 16MB 文档大小限制的文档时出现 BSONObjectTooLarge 异常。此新功能由 oversize.handling.mode 选项控制,该选项默认为 fail。如果您想利用这个新的、可选的功能,请调整此配置。(DBZ-6726

Debezium 只是利用了 MongoDB 数据库的底层功能。因此,数据库仍然存在一些限制,如 MongoDB 文档中所述,这些限制仍可能导致不符合 MongoDB 分割规则的大型文档出现异常。

支持 MySQL 8.2

MySQL 社区于 2023 年 10 月底发布了新的创新版本 MySQL 8.2.0。此新版本已与 Debezium 一起进行测试,我们很高兴地宣布我们正式支持此新创新版本。(DBZ-6873

SQL Server 通知改进

SQL Server 的 Debezium 通过读取数据库中称为捕获实例 (capture instances) 的变更来实现工作。这些实例可以根据用户的需求而存在或消失,因此很难知道 Debezium 是否已完成给定捕获实例的捕获过程。

Debezium 2.5 通过发出一个新的名为 Capture Instance 的通知聚合来解决此问题,从而允许任何观察者了解何时 Debezium 不再使用捕获实例。此新通知包含各种连接器详细信息,包括连接器的名称以及开始、停止和提交 LSN 值。(DBZ-7043

Redis Schema History 重试次数现已受限

Debezium 2.5 引入了一个新的配置选项 schema.history.internal.redis.max.attempts,用于限制连接到 Redis 数据库时重试的次数,当 Redis 数据库变得不可用时,以前会无限重试。此新选项的默认值为 10,但用户可配置。(DBZ-7120

SQL Server 驱动程序更新

SQL Serer 2019 引入了指定特定列的敏感度分类的能力,以提供对敏感数据的更好可见性和保护。不幸的是,Debezium 2.4 及更早版本中附带的当前驱动程序不支持此功能。Debezium 2.5 引入了最新的 12.4.2 SQL Server 驱动程序,以便用户现在可以开箱即用地利用此功能。(DBZ-7109

Debezium Server Kinesis Sink 改进

Debezium Server Kinesis 用户会很高兴地注意到,在 Debezium 2.5 中,Sink Adapter 的可靠性有所提高。Kinesis Sink 现在最多会重试失败记录的传递 5 次,然后才会触发失败。这应该会提高 Sink Adapter 的传递可靠性,并有助于处理批量更改可能会使 Sink 端点过载的情况。(DBZ-7032

其他修复

此外,此版本还包含相当多的稳定性修复和 bug 修复。其中包括:

  • Oracle RAC 抛出 ORA-00310: 需要存档日志序列 DBZ-5350

  • Oracle 缺少 CDC 数据 DBZ-5656

  • 缺少 Oracle CDC 记录 DBZ-5750

  • 为 Oracle 连接器特定的 Debezium Connect REST 扩展添加(集成)测试 DBZ-6763

  • MongoDBReplicaSetAuthTest 间歇性失败 DBZ-6875

  • 连接器经常错过提交操作 DBZ-6942

  • Oracle 19c 丢失事件 DBZ-6963

  • RHEL 系统测试套件中的 Mongodb 测试在 DBZ 2.3.4 中失败 DBZ-6996

  • 在测试套件中使用 DebeziumEngine 而不是 EmbeddedEngine DBZ-7007

  • Debezium Embedded Infinispan 性能缓慢 DBZ-7047

  • 字段排除对已移除字段的事件无效 DBZ-7058

  • 更新转换属性“delete.tombstone.handling.mode”到 debezium 文档 DBZ-7062

  • JDBC sink 连接器与 CloudEvent 不兼容 DBZ-7065

  • 处理过程中发生错误时 JDBC 连接泄露 DBZ-7069

  • 某些服务器测试因 @com.google.inject.Inject 注解而失败 DBZ-7077

  • 添加 MariaDB 驱动程序以进行测试和分发 DBZ-7085

  • 允许 DS JMX 在 k8 上使用用户名-密码认证 DBZ-7087

  • HttpIT 失败并出现“无法识别的字段 subEvents” DBZ-7092

  • MySQL 解析器不符合算术运算优先级 DBZ-7095

  • VitessConnectorIT.shouldTaskFailIfColumnNameInvalid 失败 DBZ-7104

  • 当使用无效配置调用 RelationalBaseSourceConnector#validateConnection 时(在 Connector#validate() 内部)可能导致异常 DBZ-7105

  • Debezium 在解析 MySQL DDL 语句(特定 INSERT)时崩溃 DBZ-7119

下一步是什么?

正如我们在上次发布公告中所述,由于即将到来的假期季节,Debezium 2.5 的发布周期有所缩短。Debezium 2.5 的下一个预览版本将是我们的第一个,很可能是唯一一个 Beta 版本,将于本月晚些时候发布。我们计划在 12 月初(很可能)发布一个候选版本 (release candidate) 来结束 Debezium 2.5 系列的发布,并在 12 月中旬,即假期休息前发布最终版本。

团队还在开发 Debezium 2.4 的维护版本,将于本周晚些时候发布。Debezium 2.4 的此更新将把 Debezium 2.5 中已有的许多错误修复和稳定性改进引入到 2.4 发布流中。

我们还在继续审查和处理 MariaDB 支持的流程。在接下来的几周内,随着我们开始寻找实现这一特定进步的途径,可能会有一些关于此事的更新。团队还将继续改进 Debezium Engine 的工作,以及更多内容。您可以在我们的 路线图中找到有关 Debezium 2.5 持续计划的所有详细信息。

最后,本周晚些时候将会有关于下一次 Debezium 社区活动的消息。请密切关注,因为我们非常希望在 12 月初的虚拟活动中看到尽可能多的社区成员参加。这是一个与 Debezium 工程师、社区贡献者会面,并提出问题、深入了解 Debezium 2.5 的所有内容以及为明年 2.6 和 2.7 做准备的绝佳机会。

一如既往,如果您有任何疑问或反馈,请随时通过邮件列表Zulip 聊天与我们联系。下次再见,保持温暖!

Chris Cranford

Chris 是 IBM 的一名软件工程师,之前在 Red Hat 工作,他致力于 Debezium 项目,并每天都在深入研究 Oracle 和 Change Data Capture 的各个方面。他此前曾从事 Hibernate(领先的开源 JPA 持久化框架)方面的工作,并且继续为 Quarkus 做贡献。Chris 居住在美国北卡罗来纳州。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×