我很荣幸地宣布 Debezium 1.1.0.Beta1 发布!
此版本增加了对事务标记事件的支持,一个用于 IBM Db2 数据库的孵化连接器,以及一系列广泛的错误修复。由于 1.1 版本仍在积极开发中,我们已将一系列错误修复回溯到 1.0 分支,并发布了 Debezium 1.0.1.Final。
在撰写本文时,并非所有连接器归档都已同步到 Maven Central;这应该会在接下来的几个小时内完成。
事务标记
Debezium 用户的一个普遍需求是,将来自多个变更数据主题的变更事件构成某种形式的“聚合体”。
例如,设想一个电子商务应用程序,它管理采购订单。在关系型数据库中,表示此类订单的信息通常会分布在多个表中,例如 PURCHASE_ORDER、ORDER_LINE 和 SHIPMENT_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 连接器
其他更改和错误修复
除了事务元数据主题和 Db2 连接器之外,Debezium 1.1 Beta1 还完成了其他一些改进和修复。
-
用于从变更事件中提取
after状态的消息转换允许根据可配置的记录字段将变更事件路由到特定主题(DBZ-1715)。 -
与 Debezium MongoDB 连接器一起使用的
ExtractNewDocumentStateSMT 现在会将Date和Timestamp字段转换为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 时,请务必仔细阅读升级说明,因为这两个组件的升级需要特定的顺序。
非常感谢 Andrea Cosentino、Alexander Schwartz、Bingqin Zhou、Igor Gabaydulin、Jan Uyttenhove、Jos Huiting、Luis Garcés-Erice、Marc Zbyszynski、Peter Urbanetz 和 Sean Rooney 为此版本做出的贡献!
在我们迈向 Debezium 1.1 的过程中,我们可能会再发布一个 Beta 版本,然后在几周后进入候选发布阶段。要了解即将推出的内容,请查看 路线图,或与我们联系,告诉我们您的具体功能需求!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。