俗话说“四月雨水带来五月花”;然而,在这种情况下,似乎一款新的 Debezium 版本如雨后春笋般涌现,充满了许多新功能。我们很高兴地宣布 Debezium 2.7 流的下一个预发布版本 Debezium 2.7.0.Alpha2 现已可供测试。

本次发布包括 Oracle 连接器新的 ROW_ID 序列化功能、JDBC 接收器连接器的 PostgreSQL 数组支持、Debezium Server 的 NATs 认证、Oracle LogMiner 和大型表的性能改进等。让我们来回顾一下本次发布的主要亮点,并深入探讨这些以及更多的内容……

新功能和改进

Debezium 2.7.0.Alpha2 还引入了许多改进和新功能,让我们逐一来看。

Oracle ROW_ID 包含在变更事件中

虽然 ROW_ID 在表的整个生命周期中并非所有行的唯一标识,但在某些情况下,当表和行的生命周期以非常严格的方式管理时,它可以使用。根据社区的要求,我们在 Oracle 连接器的变更事件源信息块中添加了一个新的 row_id 字段 (DBZ-4332)。这个新字段将在以下条件下填充 ROW_ID 值:

  • 仅从插入、更新和删除的流式事件中填充。

  • 快照事件不包含 row_id 值。

  • 仅由 LogMiner 和 XStream 流式适配器提供,不支持 OpenLogReplicator。

任何不符合条件的事件都不会包含 row_id 字段,因为它被标记为*可选*。

JDBC 接收器支持 PostreSQL 数组

JDBC 接收器连接器支持将源列映射到基于 ARRAY 的 Kafka 负载字段类型。使用 Debezium 2.7,您可以将基于 ARRAY 的字段序列化到目标 PostgreSQL 数据库,无需更改配置。新支持应该是完全透明的 (DBZ-7752)。

Oracle Flush 表支持自定义模式名称

在 Debezium 的先前版本中,Oracle 连接器被严格设计为在连接器用户账户的默认表空间中创建 LogMiner flush 表。在某些情况下,用户默认的表空间可能不是理想的目标,而 DBA 可能更希望该表存在于单独的表空间中,这时这种设计并非总是有用。

以前,用户需要修改用户账户或使用具有正确表空间的新用户,才能在正确的表空间位置创建该表。随着 Debezium 2.7 的发布,这不再是必需的,您可以安全地在配置中包含目标模式/表空间的名称 (DBZ-7819)。

使用自定义模式名称的示例
log.mining.flush.table.name=THE_OTHER_SCHEMA.LOG_MINING_FLUSH_TABLE

模式名称是可选的,如果未提供,连接器将继续使用相同的遗留行为,在用户的默认表空间中创建 flush 表并检查其是否存在。

NATS 使用 JWT/seed 进行认证

Debezium Server 的 NATs 流式接收器适配器得到了改进,支持基于 JWT/seed 的认证 (DBZ-7829)。要开始使用基于 JWT/seed 的认证,请在配置中提供以下必要值:

JWT 认证示例
debezium.sink.nats-jetstream.auth.jwt=<your_jwt_token>
Seed 认证示例
debezium.sink.nats-jetstream.auth.seed=<your_nkey_seed>

有关 JWT 和 NKey seed 认证的更多详细信息,请参阅 NATS 文档。

Oracle 查询过滤器支持大量表

Debezium Oracle 连接器可以轻松支持单个连接器部署中的数千个表;但是,您可能发现您希望使用 IN 模式自定义查询过滤器。此模式用于您可能有大量其他表的更改,并且希望在更改传递给 Debezium 进行处理之前在数据库级别过滤掉该数据集的情况。

在早期版本中,用户可能已经注意到,当 log.mining.query.filter.mode 设置为 in 并且您的表包含列表超过 1000 个元素时,会生成 SQL 错误。Oracle 不允许 in-clause 中包含超过 1000 个元素;然而,Debezium 2.7 通过使用多个 1000 个元素的 in-clause 列表的集合来解决此限制 (DBZ-7847)。

其他更改

总共有 27 个问题在此版本中得到修复。以下是一些其他值得注意的更改列表:

  • 在 MySQL keep-alive 导致关闭时死锁的情况下,尽早记录异常详细信息 DBZ-7570

  • 使用 ssl 选项扩展 mongodb 系统测试 DBZ-7605

  • > io.debezium.text.ParsingException : SQL 包含分区 DBZ-7805

  • 临时阻塞快照在未在数据库中插入行的情况下无法通过文件通道工作。 DBZ-7806

  • Postgres:连接器重启时可能发生数据丢失 DBZ-7816

  • DEBEZIUM_VERSION 被错误地设置为 2.6.0.Alpha1 DBZ-7827

  • Sql Server 错误地应用了带引号的快照语句覆盖 DBZ-7828

  • Debezium JDBC Sink 未正确处理顺序 DBZ-7830

  • 将 Outbox Extension 升级到 Quarkus 3.10.0 DBZ-7842

  • 支持 Oracle DDL Alter Audit Policy DBZ-7864

  • 支持 Oracle DDL Create Audit Policy DBZ-7865

下一步是什么?

下周我们将迎来团队的线下见面,这将是自 Covid 疫情以来我们第一次真正见面,非常令人兴奋。我们将利用这段时间讨论 Debezium 2 收到的所有社区反馈,反思哪些做得好,并为哪些做得不好制定行动计划。

我们会议的主要焦点是为 Debezium 3.0 及以后的版本制定行动计划,在团队内部分配任务和优先级,以便在我们下个季度专注于 Debezium 3 时,能够使这个主要的下一个版本轻松地替代现有版本,同时交付一个全新的、令人耳目一新、功能丰富的版本。我们回来后会更新路线图和交付项,所以请务必关注我们的路线图

就 Debezium 2.7 而言,我们已经过半,即将把重心转移到下半程,我们将着力解决所有 bug、回归问题,并完善新功能。如果您有机会试用预发布版本,我们强烈鼓励您这样做并提交 bug 报告。

下次再见……

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