我很荣幸地宣布 Debezium 1.1.0.Beta1 发布!

此版本增加了对事务标记事件的支持,一个用于 IBM Db2 数据库的孵化连接器,以及一系列广泛的错误修复。由于 1.1 版本仍在积极开发中,我们已将一系列错误修复回溯到 1.0 分支,并发布了 Debezium 1.0.1.Final

在撰写本文时,并非所有连接器归档都已同步到 Maven Central;这应该会在接下来的几个小时内完成。

事务标记

Debezium 用户的一个普遍需求是,将来自多个变更数据主题的变更事件构成某种形式的“聚合体”。

例如,设想一个电子商务应用程序,它管理采购订单。在关系型数据库中,表示此类订单的信息通常会分布在多个表中,例如 PURCHASE_ORDERORDER_LINESHIPMENT_ADDRESS。要在数据库本身中检查采购订单的完整状态,您需要对这三个表运行 JOIN 查询。

当查看 Debezium 等 CDC 连接器生成的变更事件主题时,事情会变得更具挑战性。例如,可以使用 Kafka Streams 来连接这三个表的变更事件流,并构成一个聚合视图。

我们曾在很久以前的博客中 探讨过一种可能的实现方法。然而,这种方法容易暴露中间聚合体。原因是连接逻辑无法了解源数据库所应用的事务边界。因此,例如在插入一个包含 10 条订单行的采购订单时,可能会发生以下情况:一个聚合体被构成,其中包含订单和前五条订单行,随后不久便出现包含所有 10 条订单行的完整聚合体视图。根据您的用例,将此类中间聚合体暴露给下游消费者(例如搜索索引)可能不理想。

在 Debezium 1.1 中,可以通过利用大多数连接器支持的新的事务元数据主题来解决此问题。启用后,将发布一个单独的主题,其中包含指示事务开始和结束的事件。

{
  "status": "BEGIN",
  "id": "571",
  "event_count": null,
  "data_collections": null
}
...
{
  "status": "END",
  "id": "571",
  "event_count": "11",
  "data_collections": [
    {
      "data_collection": "inventory.purchaseorder",
      "event_count": "1"
    },
    {
      "data_collection": "inventory.orderline",
      "event_count": "10"
    }
  ]
}

END 事件包含源自该事务的总变更事件数以及每个受影响表的事件数。采购订单和订单行表主题中的实际数据变更事件也包含事务 ID。这两个信息结合在一起,使流处理应用程序能够缓冲源自一个事务的所有变更事件。只有当它接收到事务的所有事件后,才能生成最终的聚合视图并将其发布给下游消费者,从而避免了暴露中间聚合视图的问题。

敬请期待一个关于这种实现的深入示例,即将推出!

IBM Db2 连接器

IBM Db2 数据库的支持在许多 Debezium 用户的 愿望清单 上已经很久了。因此,当我们注意到一组 IBM 工程师不久前主动联系我们,提出在 Debezium 框架下实现此连接器时,我们感到非常兴奋。此连接器在 Debezium 1.1 中以“孵化”状态发布。

请注意,目前使用该连接器所依赖的“ASN Capture” API 需要 IBM IIDR 产品许可证。稍后将发布一篇关于此连接器更多细节的文章;在此期间,请参阅连接器 参考文档 以了解更多信息。

其他更改和错误修复

除了事务元数据主题和 Db2 连接器之外,Debezium 1.1 Beta1 还完成了其他一些改进和修复。

  • 用于从变更事件中提取 after 状态的消息转换允许根据可配置的记录字段将变更事件路由到特定主题(DBZ-1715)。

  • 与 Debezium MongoDB 连接器一起使用的 ExtractNewDocumentState SMT 现在会将 DateTimestamp 字段转换为 org.apache.kafka.connect.data.Timestamp 逻辑类型,以明确其语义(DBZ-1717)。

  • MySQL 连接器将不再以 DEBUG 级别记录数据库密码(DBZ-1748)。

  • MySQL 连接器的 Antlr DDL 解析器可以处理 MariaDB 的 TRANSACTIONAL 关键字(DBZ-1733)以及 GET DIAGNOSTICS 语句(DBZ-1740)。

  • Postgres 连接器可与代理连接一起使用(DBZ-1738)。

总而言之,此次发布修复了 27 个问题。将 1.1 Alpha1 和 Beta1 的 16 个 错误修复反向移植到了 1.0.1.Final。在将 Postgres 连接器和配套的 decoderbufs 逻辑解码插件升级到 1.1 Beta1 时,请务必仔细阅读升级说明,因为这两个组件的升级需要特定的顺序。

在我们迈向 Debezium 1.1 的过程中,我们可能会再发布一个 Beta 版本,然后在几周后进入候选发布阶段。要了解即将推出的内容,请查看 路线图,或与我们联系,告诉我们您的具体功能需求!

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