Debezium日常分享系列之:Debezium 2.6.2.Final发布
- 一、新功能和改进
- 1.Oracle 数据库查询过滤超过 1000 个表
- 二、修复和稳定性改进
- 1.PostgreSQL 偏移刷新竞争条件
- 2.Avro 兼容性
一、新功能和改进
1.Oracle 数据库查询过滤超过 1000 个表
Debezium Oracle 连接器允许使用 log.mining.query.filter.mode 将表包含和排除列表配置为数据库查询的一部分,以提高效率。将此配置属性设置为 in 值时,将使用 SQL in 子句构造查询。在 Oracle 中,内子句仅限于 1000 个元素,如果您的连接器配置超出此限制,查询将无法执行。
Debezium 2.6 通过创建正好包含 1000 个元素的子存储桶来解决此问题,并且如果表包含和排除列表太大,则使用由析取分隔的多个内从句构建查询。这改善了用户体验,允许单个连接器使用查询过滤模式,通过一次部署捕获一千多个表,而无需诉诸正则表达式。
二、修复和稳定性改进
1.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 将正确匹配主题中的状态。
2.Avro 兼容性
在 Debezium 2.5 中,我们引入了几个新的时间戳字段 ts_us 和 ts_ns,它们表示以微秒和纳秒为单位的基于毫秒的时间值。不幸的是,这些字段没有以兼容的方式引入给使用 Avro的用户。
我们调整了更改事件架构,使得引入的新字段是可选的,使更改事件架构与旧版本兼容,以便用户可以在使用 Avro 时升级到 Debezium 2.6 或更高版本而不会出现问题。