我很高兴地宣布 Debezium 2.6.2.Final 现已可用。此版本是第二个维护版本,侧重于解决 2.6.1.Final 版本的一些关键稳定性问题,支持 Oracle 数据库查询超过一千个表的过滤,修复了 PostgreSQL 偏移量刷新的竞争条件,修复了 Avro 兼容性,等等。
让我们花点时间深入了解这些以及更多内容……
新功能和改进
Debezium 2.6.2.Final 引入了一项新功能,让我们来看看。
Oracle 数据库查询过滤,支持 1000+ 表
Debezium Oracle 连接器允许配置表包含和排除列表,这些列表将作为数据库查询的一部分进行应用,以提高效率,使用 log.mining.query.filter.mode。当将此配置属性设置为 in 值时,查询将使用 SQL in-clause 构建。在 Oracle 中,in-clause 限制为一千个元素,如果连接器的配置超过此限制,查询将无法执行。
Debezium 2.6 通过创建恰好一千个元素的子存储桶来解决此问题,并通过多个 in-clauses 分隔符(如果表包含和排除列表太大)来构建查询。这改善了用户体验,允许单个连接器使用查询过滤器模式捕获超过一千张表,而无需使用正则表达式。(DBZ-7847)。
修复和稳定性改进
Debezium 2.6.2.Final 引入了多项新的 bug 修复和稳定性改进,让我们来看其中一些。
PostgreSQL 偏移量刷新竞态条件
Debezium PostgreSQL 连接器要求我们不仅要将偏移量元数据发布到 Kafka 以处理连接器重启,还必须将这些详细信息刷新到数据库的底层复制槽,以防止 WAL 无限增长。
以一个例子来说,假设我们有两个 LSN 1 和 2 的更改。这两个更改分别写入了两个不同的分区 A 和 B。由于这是异步发生的,所以写入分区 B 可能会成功,而写入分区 A 可能会失败。
如果 Debezium 在收到分区 A 的确认之前收到了分区 B 的确认,连接器会将 WAL 已确认的 LSN 同步为 2。如果连接器在确认分区 A 之前失败或由于重新平衡而重新启动,连接器重启后,LSN 1 的更改将丢失。
这个问题已在 Debezium 2.6 及更高版本中修复,复制槽的已确认 LSN 将正确匹配主题中的状态(DBZ-7816)。
Avro 兼容性
在 Debezium 2.5 中,我们引入了几个新的时间戳字段 ts_us 和 ts_ns,它们表示微秒和纳秒的基于毫秒的时间值。不幸的是,这些字段的引入方式对于使用 Avro 的用户来说是不兼容的(DBZ-7880)。
我们调整了更改事件模式,使引入的新字段成为可选的,从而使更改事件模式与旧版本兼容,以便用户可以使用 Avro 无缝升级到 Debezium 2.6 或更高版本。
其他修复
-
在 Debezium 首次部署后,如果向 MSSQL 添加了新表,其 schema 会被捕获 DBZ-7697
-
NO_DATA 快照模式验证在快照未完成时重试时抛出 DebeziumException DBZ-7780
-
DDL 语句无法解析 DBZ-7788
-
ibmi-connector 服务中的旧类引用 DBZ-7795
-
临时阻塞快照在未在数据库中插入行的情况下无法通过文件通道工作。 DBZ-7806
-
Postgres:连接器重启时可能发生数据丢失 DBZ-7816
-
向 JDBC sink 添加 c3p0 超时配置示例 DBZ-7822
-
Sql Server 错误地应用了带引号的快照语句覆盖 DBZ-7828
-
Debezium JDBC Sink 未正确处理顺序 DBZ-7830
-
在 Cassandra 文档中,有一个拼写错误,应该是 disable 而不是 Dusable。 DBZ-7851
-
Debezium MySQL 快照连接器失败 DBZ-7858
-
支持 Oracle DDL Alter Audit Policy DBZ-7864
-
支持 Oracle DDL Create Audit Policy DBZ-7865
-
错误重试的默认值未正确解释 DBZ-7870
-
Debezium 更新后日志过多 DBZ-7871
-
从 Oracle Debezium 2.5.3.Final 升级到 2.6.1.Final 时的 Avro 模式兼容性问题 DBZ-7880
-
ParsingException (MySQL 8): create trigger if exists DBZ-7881
-
Debezium 无法处理名称中带有 # 的列 DBZ-7893
-
Oracle 间隔默认值未正确解析 DBZ-7898
非常感谢社区中辛勤工作的贡献者们,他们为这个版本付出了努力:Anil Dasari、Chris Cranford、Duc Le Tu、Ilyas Ahsan、Jiri Pechanec、Jochen Schalanda、Mario Fiore Vitale、Michal Augustýn、Pradeep Nain、Robert Roldan、Robin Moffatt、Roman Kudryashov,以及 Vadzim Ramanenka!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。