圣诞节还没到,但我们已经为你准备了一份礼物:Debezium 0.7.0 现已发布,包含丰富的新功能和许多错误修复!非常感谢所有为本次发布做出贡献的社区成员。看到不仅有越来越多的问题和功能请求被报告,还有越来越多的 pull request 提交,这让我们倍受鼓舞。
请注意,本次发布对某些数据类型的默认映射进行了一些小的更改。我们尽量避免此类更改,但在某些情况下这是必需的,例如,如果之前的映射可能导致潜在的值丢失。请参阅下文了解详细信息,并请务必查看完整的更改日志,其中详细描述了这些更改。
现在让我们仔细看看一些新功能。
基于 Apache Kafka 1.0
PostgreSQL 连接器
PostgreSQL 连接器的主要新闻是它现在 支持 wal2json 逻辑解码插件,作为现有 DecoderBufs 插件 的替代方案。这意味着您现在可以使用 Debezium 从 Amazon RDS 上的 PostgreSQL 流式传输更改,因为 wal2json 是此环境中使用的逻辑解码插件。非常感谢 Robert Coup 为此功能做出的重大贡献。
在处理此插件时,我们注意到在应用捕获的表模式更改时存在 潜在的竞态条件。在这种情况下,可能会出现一些与模式更改之前的已完成数据更改相关的消息使用新模式发出的情况。除了少数例外情况(已在此处 描述),在使用 Debezium 自带的 DecoderBufs 插件时已解决了此问题。因此,强烈建议在升级 Debezium 连接器之前,先升级 DecoderBufs 插件。我们还与 wal2json 插件的作者密切合作(非常感谢他的快速帮助!),以防止在使用 wal2json 插件时出现此问题。
虽然 Debezium 的 Postgres Docker 镜像已经内置了最新版本的 DecoderBufs 和 wal2json,但 RDS 目前仍在使用旧版本的 wal2json。在此更新之前,在对捕获的表应用模式更改时必须格外小心。有关此问题的详细描述和缓解方法,请参阅 变更日志。
我们添加了新的每日运行 CI 作业,以验证 wal2json 插件是否通过了我们的测试套件。在可预见的未来,我们将同时支持 wal2json 和现有的 DecoderBufs 插件。由于使用了 Protocol Buffers 二进制格式,后者应该更有效率;而前者对于您无法控制已安装的逻辑解码插件但 wal2json 可用的 RDS 或其他云环境非常有用。
在 Postgres 连接器的其他新闻方面,Andrey Pustovetov 发现并提出了一个 多线程 bug 的修复方案,如果 Connect 集群在快照过程中触发了重新平衡,该 bug 可能导致连接器进入未定义状态。谢谢你,Andrey!
MySQL 连接器
在 MySQL 连接器中,我们修复了两个影响某些列类型默认映射的问题。
继 Debezium 0.6.1 中引入的新的 BIGINT UNSIGNED 映射之后,此类型现在 默认 被编码为 Debezium 消息中的 int64,因为这对于(多语言)客户端来说更容易处理。这在绝大多数情况下是一个合理的映射。只有当使用大于 2^63 的值时,您才应该将其切换回 Decimal 逻辑类型,尽管这稍微麻烦一些。这种情况应该很少见,因为 MySQL 建议不要 使用大于 2^63 的无符号值,因为在执行数据库端计算时可能会丢失值。有关详细信息,请参阅 连接器文档。
Rene Kerner 改进了对 MySQL TIME 类型的支持。MySQL 允许在此类列中存储大于 23:59:59 的值,而之前用于 TIME(0-3) 列的 int32 类型不足以传递整个可能的值范围。因此,现在默认情况下,MySQL 中的所有 TIME 列都表示为 int64,使用 io.debezium.time.MicroTime 逻辑类型,即该值表示微秒。如果需要,您可以将设置 time.precision.mode 为 adaptive 来切换到之前的映射,但只有当您确定只会使用适合 int32 的值时才应这样做。此选项仅为过渡期保留,将在未来版本中移除。
最近我们收到一个 报告,称 MySQL 的 binlog 可能包含 ROLLBACK 语句,从而包含实际上未提交的事务。在这种情况下,自然不应发出任何数据更改消息。例如,当删除临时表时可能会出现这种情况。因此,我们引入了 前瞻缓冲区 功能,该功能按事务读取 binlog 并排除已回滚的事务。此功能应被视为实验性功能,目前默认禁用。我们希望收集您的反馈,因此如果您能从中受益,请尝试使用它并告诉我们您是否遇到任何问题。有关更多详细信息,请参阅 MySQL 连接器文档中的 binlog.buffer.size 设置。
Andras Istvan Nagy 提出了一个想法并 实现 了一种显式选择每个表中将包含在快照过程中的行的方法。例如,如果您使用软删除,并且希望从快照中排除所有逻辑上已删除的记录,这将非常有用。
有关更多详细信息和已修复问题的完整列表,请参阅 完整变更日志。
下一步是什么?
Debezium 0.7.1 版本计划在圣诞节后约两周发布。
它将包含一个新的 SMT,它将把 MongoDB 更改事件解开成标准的 JSON,以便 sink 连接器可以使用。
对 GEOMETRY 类型的大规模改造正在进行中。完成后,MySQL 和 PostgreSQL 连接器都将支持所有 GEOMETRY 类型,并且它们将以标准的 WKB 格式提供,以便多语言客户端轻松使用。
MySQL 连接器正在进行工作,以允许动态更新 table.whitelist 选项。这将使用户无需重新创建连接器即可重新配置捕获的表集。
如果您想做出贡献,请告知我们。我们很乐意提供任何帮助,并将与您合作,帮助您快速入门。有关如何联系的详细信息,请参阅下文。
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。