我非常激动地宣布 Debezium 0.8.0.Beta1 发布!

此版本带来了许多令人兴奋的新功能以及错误修复,例如:我们新的 Oracle 连接器的第一个版本,MySQL 连接器的一个全新 DDL 解析器,对 MySQL 默认值的支持,以及升级到 Apache Kafka 1.1。

由于更改数量庞大(总共42 个问题),我们决定稍微调整版本方案:今后,我们可能会进行一个或多个 Beta 和 CR(“候选发布”)版本,然后再发布最终版本。这将使我们能够及早获得社区的反馈,同时仍能完成和完善特定功能。最终(稳定)版本将命名为 0.8.0.Final 等。

本次发布离不开我们杰出的社区贡献;非常感谢以下开源爱好者为新版本做出的贡献:Echo Xu, Ivan Vucina, Listman Gamboa, Omar Al-Safi, Peter Goransson, Roman Kuchar(他在新的 DDL 解析器实现方面做得非常出色!), Sagar Rao, Saulius Valatka, Sairam Polavarapu, Stephen PowisWenZe Hu

非常感谢大家的帮助!

现在让我们仔细看看 Debezium 0.8.0.Beta1 的一些新功能;与往常一样,您可以在变更日志中找到此版本的所有更改。请特别关注破坏性更改和升级说明。

基于 XStream 的 Oracle 连接器 (技术预览)

Debezium Oracle 连接器的支持一直是大家长期以来最期待的功能之一(其原始 issue 号为DBZ-20!)。因此,我们非常高兴终于能发布该连接器的第一个仍在开发中的版本。目前,此代码仍处于非常活跃的开发阶段,因此应视为一个初步的技术预览。这意味着它尚未实现所有功能(最值得注意的是,目前还不支持初始快照),并且发出的消息格式仍可能发生变化。因此,虽然我们目前不建议在生产环境中使用它,但您绝对应该尝试一下并分享您的使用体验。

Oracle 连接器的一个挑战是如何从数据库中提取实际的变更事件。与 MySQL 和 Postgres 不同,遗憾的是,Oracle 没有一个免费且易于使用的 API 来实现同样的功能。经过一些探索,我们决定基于Oracle XStream API 来构建此连接器的第一个版本。虽然这(在某种程度上)满足了“易于使用”的要求,但它不满足“免费使用”的要求:使用此 API 需要您拥有 Oracle 独立 GoldenGate 产品的许可证。我们充分意识到这并不理想,但我们决定将其作为第一步,这样我们就可以积累一些 Oracle 使用经验,并让拥有所需许可证的用户能够使用该连接器。未来,我们将探索替代方法。我们已经有一些想法和讨论,敬请关注(跟踪 issue 为DBZ-137)。

Oracle 连接器将在接下来的 0.8.x 版本中不断演进。要了解更多关于它的信息,请查看其连接器文档页面

基于 Antlr 的 MySQL DDL 解析器

为了构建捕获数据库结构的内部元模型,Debezium MySQL 连接器需要解析所有发出的 DDL 语句(例如 `CREATE TABLE`)。这以前是通过手工编写的 DDL 解析器完成的,该解析器工作得相当不错,但随着时间的推移也暴露出一些不足之处;由于 DDL 语言非常广泛,我们反复收到关于某些特定 DDL 构造无法解析的 bug 报告。

因此,我们决定重新设计并提出了全新的解析器设计。感谢 Roman Kuchar 的出色工作,我们现在有了一个全新的 DDL 解析器,它基于成熟且非常稳定的Antlr 解析器生成器(幸运的是,Antlr 项目提供了完整的 MySQL 语法)。因此,预计未来与 DDL 解析相关的 issue 报告将大大减少。

目前,旧的解析器仍然保留,并且仍然是 Debezium 0.8.x 的默认解析器。我们强烈建议您通过将连接器选项 `ddl.parser.mode` 设置为 `antlr` 来测试新实现,并在遇到任何问题时及时反馈。我们计划在 0.8.x 版本系列中改进和完善 Antlr 解析器(特别是我们将衡量其性能并进行优化),并将其作为 Debezium 0.9 的默认设置。最终,旧的解析器将在之后的一个版本中被移除。

MySQL 连接器的其他更改

MySQL 连接器现在会将列的默认值传播到相应的 Kafka Connect schema 中(DBZ-191)。这在使用 Avro 作为序列化格式,并且 schema 注册表启用了兼容性检查时非常有用。

通过将 `include.query` 连接器选项设置为 true,您可以将导致数据更改的原始查询添加到相应的 CDC 事件中(DBZ-706)。尽管默认情况下禁用,但此功能对于分析和解释 Debezium 捕获的数据更改非常有用。

MySQL 连接器中的其他一些更改包括:心跳 topic 名称的可配置性(DBZ-668),`TIMESTAMP`(DBZ-578)和 `DATETIME` 列(DBZ-741)的时区处理修复,以及对没有显式精度值的 `NUMERIC` 列的正确处理(DBZ-727)。

Postgres 连接器

Debezium Postgres 连接器进行了大量的 bug 修复,包括以下几项:

  • wal2json 现在可以处理大于 1Gb 的事务(DBZ-638)。

  • 事务 ID 现在被一致地处理为 long 类型(DBZ-673)。

  • 修复了多个与时间类型列相关的 bug(DBZ-681, DBZ-696)。

  • OIDs 现在被正确地作为无符号整数处理(DBZ-697, DBZ-701)。

MongoDB 连接器

MongoDB 连接器也进行了一些小的功能实现和 bug 修复。

  • 已针对 MongoDB 3.6 进行测试(DBZ-529)。

  • 现在可以使用提供的 SMT 来展平嵌套文档(DBZ-561),这在将 MongoDB 的变更同步到关系型数据库时非常有用。

  • 现在可以将 unwrapping SMT 与 Avro 一起使用(DBZ-650)。

  • unwrapping SMT 可以处理具有混合元素类型的数组(DBZ-649)。

  • 如果在快照完成前中断,连接器将在重启后重新执行快照(DBZ-712)。

下一步是什么?

根据新的 Beta/CR/Final 发布计划,我们希望获得社区(也就是您 :))对此 Beta 版本的反馈。根据报告的 issue 数量,我们将在下一个版本中发布另一个 Beta 版本或直接发布 CR1。0.8.0.Final 版本将在几周内发布。请注意,Oracle 连接器在最终版本中仍将是“技术预览”组件。

在此之后,我们计划发布一些主要包含 bug 修复的 0.8.x 版本,同时将并行开始 Debezium 0.9 的开发。对于 0.9,我们计划开发一个 SQL Server 连接器(见DBZ-40)。我们还希望探索基于原始事务 ID,从多个表的 CDC 流创建一致连接体(materializations of joins)的方法。另外,还有一个想法和初步原型,即将 Debezium 变更事件作为响应式事件流(DBZ-566)暴露出来,这可能会被最终发布。

请查看路线图以了解更多长期想法,如果您有相关想法,请与我们联系。

Gunnar Morling

Gunnar 是一位软件工程师,内心是一个开源爱好者,目前在 Confluent 担任技术专家。此前,他曾帮助构建一个基于 Apache Flink 的实时流处理平台,并领导了 Debezium 项目,这是一个用于变更数据捕获的分布式平台。他是 Java Champion,并创立了多个开源项目,如 JfrUnit、kcctl 和 MapStruct。Gunnar 是一位热情的博主 (morling.dev),并曾在 QCon、Java One 和 Devoxx 等各种会议上发表演讲。他居住在德国汉堡。

   


关于 Debezium

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

参与进来

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

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