Debezium-land 这个月过得很充实,我很高兴地宣布 Debezium 2.4 系列的第一个版本 2.4.0.Alpha1。
本次发布包含大量更改,确切来说是 59 项更改,涵盖了广泛的已解决问题、稳定性改进、新功能以及一些重大更改。让我们深入探讨其中每一个,并进行更详细的讨论。
重大变更
新功能
Offset 编辑器示例
用户经常表达需要出于各种原因操作连接器偏移量的需求。对于那些不熟悉 Kafka 命令行工具或 Java(如果您使用 Debezium Server)的用户来说,这通常非常困难。得益于 Nathan Smit 的贡献(DBZ-6338),您现在可以从命令行或基于 Web 的界面使用编辑器来操作偏移量。
前往我们的 示例仓库,并按照 README.md 说明开始。
错误处理
一些 Debezium 连接器先前使用了一个连接器属性 errors.max.retries。此属性控制 Debezium 连接器故障异常被显式包装在 RetriableException 中的次数,但连接器将原始异常抛出给运行时。虽然这听起来类似于 Kafka Connect 的 errors.retry.timeout,但这有效地为用户提供了一种跨多个 Debezium 运行时(包括 Kafka Connect、Debezium Server 和 Debezium Embedded)处理重试的通用方法。
在此版本中,DBZ-6573 统一了此行为,使其可用于所有连接器。
通知初始快照进度
Debezium 的新通知子系统提供了一种简单的方式,可以将第三方工具和应用程序与 Debezium 集成,以深入了解正在进行的变更数据捕获过程,超越传统的 JMX 方法。在 2.4 版本中,通知子系统现在包括了通知初始快照状态的能力(DBZ-6416)。
初始快照通知以 aggregatetType 为 Initial Snapshot 发出,并包含一个 type 字段,该字段显示快照的当前状态。可能的值包括:STARTED、ABORTED、PAUSED、RESUMED、IN_PROGRESS、TABLE_SCAN_COMPLETED 和 COMPLETED。
MySQL 改进
得益于 Harvey Yue 的贡献(DBZ-6472),MySQL 连接器将在快照阶段使用并行化来生成模式事件。这应该会提高捕获数据库中许多表模式的整体性能。我们计划研究如何将此扩展到其他关系型连接器。
MongoDB 改进
MongoDB 连接器继续看到大量活跃开发。此版本为 MongoDB 引入了几个新功能,包括:
随着我们继续对 MongoDB 连接器进行进一步改进,如果您还有不尽如人意之处或需要增强功能以简化其使用,请告诉我们。
Oracle 改进
Debezium 2.4 支持几种新的 Oracle 数据类型,包括 XML_TYPE 和 RAW(DBZ-3605)。支持 XML 需要两个新的 Oracle 依赖项:xdb 和 xmlparserv2。这些依赖项不可重新分发,因此默认情况下不包含在连接器插件存档中,这一点与连接器的驱动程序类似。您必须像依赖驱动程序一样,直接从 Maven Central 或 Oracle 获取它们。
此外,XML 的工作方式类似于 CLOB 和 BLOB 数据类型;因此,必须将连接器配置为 lob.enabled 设置为 true 才能摄取 XML 更改。我们很乐意听取您对此新功能的反馈,因为它被要求了很长时间。
JDBC Sink 改进
得益于 Nicholas Fwang 的贡献(DBZ-6595),JDBC Sink 连接器现在可以在连接器配置属性 table.name.format 中引用更改事件 source 信息块中的值。如果您想引用此类字段,只需在配置中使用 ${source.<field-name>},系统就会使用该字段的值。
此外,Roman Kudryashov 还贡献了从更改事件上的头信息解析行主键的功能(DBZ-6602)。要使用此新功能,请将连接器配置属性 primary.key.mode 指定为 record_header。如果头信息值是基本类型,您将需要定义一个 primary.key.fields 配置,就像事件的记录键是基本类型时一样。如果头信息值是 struct 类型,默认情况下将使用结构的所有字段,但指定 primary.key.fields 属性允许您从头信息中选择一部分字段作为键。
Spanner 改进
在某些条件下,Spanner 连接器在初始化期间可能无法从 START_INITIAL_SYNC 状态前进。在 Nancy Xu 进行调查后,引入了一个新的配置选项来提供可配置的超时。这可以通过在连接器的配置中添加以下内容来完成:
connector.spanner.task.await.initialization.timeout=<timeout in milliseconds> Debezium UI 指标
Debezium UI 项目允许您使用基于 Web 的界面将任何 Debezium 连接器轻松部署到 Kafka Connect。此版本通过在主连接器列表视图中包含几个连接器指标(DBZ-5321)来改进了界面。我们很乐意收到您对此更改的反馈,并欢迎您对其他有用的指标提出任何建议。
其他修复
此外,此版本还包含相当多的稳定性修复和 bug 修复。其中包括:
-
Mysql 连接器解析 FLUSH FIREWALL_RULES 语句失败 DBZ-3925
-
添加 API 端点以公开正在运行的连接器指标 DBZ-5359
-
显示关键连接器指标 DBZ-5360
-
如果过滤掉了最后一个记录,则不会保存快照结果 DBZ-5464
-
定义并记录模式历史主题消息模式 DBZ-5518
-
跨连接器统一 query.fetch.size DBZ-5676
-
升级到 Apache Kafka 3.5.0 DBZ-6047
-
从 UI 前端代码中移除下游相关代码 DBZ-6394
-
使 Signal 操作可扩展 DBZ-6417
-
CloudEventsConverter 在 Kafka Connect 3.5+ 上抛出静态错误 DBZ-6517
-
Dependency io.debezium:debezium-testing-testcontainers 影响了测试中的 logback DBZ-6525
-
清理 Jenkins 中的重复作业 DBZ-6535
-
实现分片 MongoDB OCP 部署和集成测试 DBZ-6538
-
首个 DELETE 语句的批次将跳过所有其他内容 DBZ-6576
-
Oracle 不支持的 DDL 语句 - drop multiple partitions DBZ-6585
-
仅支持 Struct 对象用于 [Header field insertion],找到:null DBZ-6588
-
支持 PostgreSQL 的 UUID、JSON 和 JSONB 数据类型的强制转换 DBZ-6589
-
MySQL 解析器无法解析 CAST AS dec DBZ-6590
-
重构 Redis schema history 中的重试处理 DBZ-6594
-
过多的日志消息“Marking Processed Record for Topic” DBZ-6597
-
支持连接器指标中的自定义标签 DBZ-6603
-
修复了表扫描完成通知的 DataCollections DBZ-6605
-
如果 ORA-01327 被另一个 JDBC 或 Oracle 异常包装,Oracle 连接器将无法恢复 DBZ-6610
-
解析 Mysql (Percona 5.7.39-42) 过程时出现致命错误 DBZ-6613
-
Postgres 连接器的构建在针对 Kafka 2.X 构建时失败 DBZ-6614
-
将 postgresql 驱动程序升级到 v42.6.0 DBZ-6619
-
MySQL ALTER USER with RETAIN CURRENT PASSWORD 在解析异常时失败 DBZ-6622
-
升级 Quarkus 到 3.2.0.Final DBZ-6626
-
关于 additional-condition 的文档不准确 DBZ-6628
-
Oracle 连接 SQLRecoverableExceptions 默认不重试 DBZ-6633
-
升级 kcctl 到 1.0.0.Beta3 DBZ-6642
-
无法删除非空间隔值 DBZ-6648
-
升级 gRPC 到 1.56.1 DBZ-6649
-
Debezium 2.3 中的 ConcurrentModificationException DBZ-6650
-
Dbz 在解析 Mysql 存储过程代码 (Statement Labels) 时崩溃 DBZ-6651
-
CloudEvents converter 在 JSON 消息反序列化时损坏 DBZ-6654
-
Vitess:如果表名是 mysql 保留字,连接器会失败 DBZ-6656
-
由 test-containers 模块引起的 JUnit 冲突,该模块使用了 quarkus 的传递性 JUnit5 DBZ-6659
-
禁用 Kafka 2.x CRON 触发器 DBZ-6667
总共为本次发布修复了 59 个问题。非常感谢社区中为本次发布做出贡献的所有人员:Adam Strickland, Alisa Houskova, Anatolii Popov, Anisha Mohanty, Ant Kutschera, Artur Gukasian, Balint Bene, Bob Roldan, Chris Cranford, Harvey Yue, Hossein Torabi, Indra Shukla, Inki Hwang, Jakub Cechacek, Jiri Pechanec, Mario Fiore Vitale, Martin Medek, Nancy Xu, Ondrej Babec, René Kerner, Seo Jae-kwon, Stefan Miklosovic, Thomas Thornton, and Vojtech Juranek!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。