Debezium-land 这个月过得很充实,我很高兴地宣布 Debezium 2.4 系列的第一个版本 2.4.0.Alpha1

本次发布包含大量更改,确切来说是 59 项更改,涵盖了广泛的已解决问题、稳定性改进、新功能以及一些重大更改。让我们深入探讨其中每一个,并进行更详细的讨论。

重大变更

MongoDB

MongoDB 连接器先前在特定场景下明确偏好使用 secondary。这种明确的用法给希望连接到 primary 节点的用户带来了问题。由于最近的更改(DBZ-6521),情况已不再如此,而是使用连接字符串设置。

Vitess

得益于(DBZ-6617)的更改,Vitess 连接器的更改事件结构已进行了微调。更改事件的 source 信息块现在包含一个新字段,用于标识事件的源分片。

新功能

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)。

初始快照通知以 aggregatetTypeInitial Snapshot 发出,并包含一个 type 字段,该字段显示快照的当前状态。可能的值包括:STARTEDABORTEDPAUSEDRESUMEDIN_PROGRESSTABLE_SCAN_COMPLETEDCOMPLETED

MySQL 改进

得益于 Harvey Yue 的贡献(DBZ-6472),MySQL 连接器将在快照阶段使用并行化来生成模式事件。这应该会提高捕获数据库中许多表模式的整体性能。我们计划研究如何将此扩展到其他关系型连接器。

MongoDB 改进

MongoDB 连接器继续看到大量活跃开发。此版本为 MongoDB 引入了几个新功能,包括:

  • 在监视单个数据库或集合时不再需要集群范围的权限(DBZ-6182)。

  • 从连接字符串读取首选项(DBZ-6468, DBZ-6578)。

  • 支持 TC MongoDB 部署的身份验证(DBZ-6596)。

随着我们继续对 MongoDB 连接器进行进一步改进,如果您还有不尽如人意之处或需要增强功能以简化其使用,请告诉我们。

Oracle 改进

Debezium 2.4 支持几种新的 Oracle 数据类型,包括 XML_TYPERAWDBZ-3605)。支持 XML 需要两个新的 Oracle 依赖项:xdbxmlparserv2。这些依赖项不可重新分发,因此默认情况下不包含在连接器插件存档中,这一点与连接器的驱动程序类似。您必须像依赖驱动程序一样,直接从 Maven Central 或 Oracle 获取它们。

此外,XML 的工作方式类似于 CLOBBLOB 数据类型;因此,必须将连接器配置为 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

下一步是什么?

Debezium 2.4 的首次发布已包含大量新功能,而团队才刚刚起步。看看我们的 路线图,我们已经完成了 2.4 计划的一半,但仍有许多工作要做,包括:

  • TimescaleDB 和 Timestamps 的单消息转换

  • Oracle 的 OpenLogReplicator 摄取

  • Ad-hoc 阻塞快照

  • Debezium Embedded 的并行化

  • MongoDB 的并行增量快照

  • 进一步改进 Debezium UI

我们打算保持大约两周的发布节奏,因此预计八月初会发布 Alpha2。在此之前,如果您有任何想法或建议,请务必通过 邮件列表 或我们的 聊天 与我们联系。

Chris Cranford

Chris 是 IBM 的一名软件工程师,之前在 Red Hat 工作,他致力于 Debezium 项目,并每天都在深入研究 Oracle 和 Change Data Capture 的各个方面。他此前曾从事 Hibernate(领先的开源 JPA 持久化框架)方面的工作,并且继续为 Quarkus 做贡献。Chris 居住在美国北卡罗来纳州。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

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