我很高兴地宣布 Debezium 0.9.0.Alpha2 的发布!

虽然 SQL Server 和 Oracle 连接器的开发仍在继续,但我们决定进行另一次 Alpha 版本发布,因为已经积累了大量的修复和新功能——其中许多是由社区成员贡献的,我们希望尽快将它们交给您。

此版本支持 Apache Kafka 2.0,支持 Postgres 的 HSTORE 列类型,允许重命名和过滤 MongoDB 变更数据消息中的字段,并包含多项错误修复和性能改进。总体而言,此版本包含55 项修复(请注意,其中一些已合并到 0.8.x 中,并且也包含在早期的 0.8 版本中)。

非常感谢社区成员 Andrey PustovetovArtiship ArtishipCliff WheadonDeepak BarrIan AxelrodLiu HanlinMaciej BryńskiOri PopowskiPeng LyuPhilip SanetraSagar RaoSyed Muhammad Sufyian 对此版本的贡献。我们向您致敬!

Kafka 升级

Debezium 在最近发布的 Apache Kafka 2.0 (DBZ-858) 上运行并已在该版本上进行过测试。广泛使用的 Kafka 1.x 版本也继续得到支持。

请注意,由于 Debezium 使用的 admin client API 仅在较新版本中可用,因此不支持 0.10.x。要解决此问题应该不难,如果您有兴趣帮忙,这将是一个很棒的贡献(请参阅 DBZ-883)。

支持 Postgres 的 HSTORE 列

Postgres 是一个极其强大且灵活的关系型数据库,这很大程度上归功于其广泛的列类型,远超 SQL 标准的定义。其中一种类型是 HSTORE,本质上它是一个字符串到字符串的映射。

Debezium 现在可以捕获此类型列的更改了(DBZ-898)。默认情况下,字段值将使用 Kafka Connect 的 map 数据类型表示。由于并非所有 sink 连接器都支持这一点,您也可以通过将新的 hstore.handling.mode 连接器选项设置为 json 来将其表示为字符串化的 JSON。在这种情况下,您将在更改消息中看到 HSTORE 列表示为类似如下的值:{ "key1" : "val1", "key2" : "val2" }

MongoDB 的字段过滤和重命名

与 MySQL 和 Postgres 的连接器不同,Debezium MongoDB 连接器到目前为止还不允许将捕获集合的单个字段排除在 CDC 消息之外。例如,通过 Kafka 的 ReplaceField SMT 也不支持重命名它们。原因是 MongoDB 不强制要求给定集合文档具有固定模式,因此文档在更改消息中以单个字符串化的 JSON 字段表示。

感谢社区成员 Andrey Pustovetov 的出色工作,这种情况终于得到了改变,也就是说,您现在可以从给定集合的 CDC 消息中删除指定字段(DBZ-633)或者对它们进行重命名(DBZ-881)。请参阅 MongoDB 连接器文档 中关于新的连接器选项 field.blacklistfield.renames 的说明以了解更多信息。

扩展的源信息

Andrey 的另一项贡献是 CDC 消息源信息块中新增了一个可选的 connector 字段(DBZ-918)。这可以指示生成消息的源连接器的类型("mysql", "postgres" 等),这在需要根据源数据库类型在消费者端应用特定语义的情况下会很有用。

Bug 修复和版本升级

新版本包含大量 bug 修复和其他小型改进。其中有:

  • 正确处理 MySQL 的无效临时默认值(DBZ-927),

  • 支持 MySQL (DBZ-878) 和 MongoDB (DBZ-865) 的带特殊字符的表/集合名称,以及

  • 修复了使用新的 Antlr 解析的 DDL 解析器处理黑名单表的问题(DBZ-872)。

社区成员 Ian Axelrod 提供了一个关于潜在性能问题的修复。在 Postgres 中,对带有 TOAST 列的表进行更改会导致连接器的内部 schema 元数据反复更新,这可能是一项昂贵的操作(DBZ-911)。请参阅 Postgres 连接器文档 中关于处理此问题的新 schema.refresh.mode 选项的详细信息。

在版本升级方面,我们迁移到了最新的 MySQL (DBZ-763, DBZ-764) 和 Postgres 驱动程序(DBZ-912)。前者是朝着支持 MySQL 8 的长期工作的一部分,该工作应在接下来的 Debezium 版本中完成。对于 Postgres,我们现在提供基于 Alpine 的 Debezium 支持的逻辑解码插件的 Docker 镜像,这对于关注容器大小的用户可能很有吸引力(DBZ-705)。

有关已修复问题的完整列表,请参阅更改日志。

下一步是什么?

Debezium 0.9 的开发工作仍在继续,我们将主要专注于改进 SQL Server 和 Oracle 连接器。其他潜在主题包括对 MySQL 8 和 Postgres 10 中引入的原生逻辑解码的支持,这将极大地帮助在 Amazon RDS 等云环境中使用 Debezium Postgres 连接器。

我们还将在以下会议上讨论 Debezium:

上周,我已有机会在 JUG Saxony Day 上展示 Debezium。如果您有兴趣,可以在 Speaker Deck 上找到该讲座的(德语)幻灯片

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