Debezium日常分享系列之:Debezium 2.7.1.Final发布
一、修复和稳定性改进
MariaDB现在已包含在Debezium容器镜像中
- 在Debezium 2.7.0.Final中,我们错误地忽略了在容器镜像中包含新的MariaDB连接器,这要求用户手动安装MariaDB连接器。这个问题已经修复,Debezium 2.7.1.Final的容器镜像现在包含了之前的所有连接器。
MariaDB RENAME TABLE的支持
- 在Debezium 2.7中,将MariaDB和MySQL分离为独立的连接器后,每个连接器都使用独特的语法来解析SQL语句。我们发现了一个回归问题,即新的MariaDB语法不支持RENAME TABLE的SQL语法。这个问题已经修复,并且在MySQL和MariaDB中都得到了完全支持。
修复了JDBC sink分区重新平衡的问题
在之前的Debezium JDBC sink版本中,用户可能会在连接器日志中注意到一些奇怪的消息,类似于以下输出:
- Ignoring invalid task provided offset topicXYZ-1 OffsetAndMetadata{offset=4966, leaderEpoch=null, metadata=‘’} — partition not assigned, assignment=[topicXYZ-1] (org.apache.kafka.connect.runtime.WorkerSinkTask:434)
- 我们发现JDBC sink连接器没有正确处理跨多个任务的分区重新平衡。这个回归问题已在2.7.1.Final中修复,当发生分区重新平衡时,不再管理该分区的任务将关闭该分区;因此,上述消息将不再写入连接器日志中。
临时快照改进
- 在Debezium 2.7中,如果您选择了insert_delete水印策略来处理信号表条目,您可能会注意到连接器最终会因StackOverflowError而失败。通过Debezium 2.7.1.Final或更高版本,这个回归问题已经得到修复,用户可以再次使用insert_delete水印策略。
- 此外,还有一个报告称,发送一个包含与数据库表不匹配的正则表达式的临时快照信号会导致临时快照过程失败,出现"Unexpected result ."错误(DBZ-8050)。这个问题也已经修复,因此临时快照将优雅地跳过该信号,因为没有找到匹配的表。
- 最后,还发现临时阻塞快照可能会导致CommunicationsException,原因是初始和阻塞快照代码路径管理连接的方式。通过在Debezium 2.7.1.Final中使阻塞快照在需要时验证和重新打开连接,这个问题已经得到修复。
嵌入式引擎现在会关闭转换
- Debezium团队最近发布了新的异步嵌入式引擎,并在每个版本中继续改进。作为我们不断改进的一部分,我们发现单个消息转换没有调用它们的close()方法。这可能会根据转换所做的工作而很容易导致资源泄漏。
- 该版本引入了一个修复程序,自动关闭转换以避免这个问题。
Oracle连接器可能会产生NullPointerException
- 为了解决Oracle LogMiner和捕获更改时的几个竞争问题,对Debezium Oracle连接器进行了一项更改。不幸的是,这个更改引入了一种特殊情况,即连接器会重新计算上限挖掘范围,在这种情况下会导致NullPointerException。
- 为了解决这个问题,在Debezium 2.7.1.Final中加入了一个新的修复程序。建议Oracle连接器用户升级到2.7.1.Final,并跳过2.7.0.Final,以避免出现这个回归问题。
修复了Vitess时代计算问题
- 我们发现一些特殊情况下,在事务ID不可用时,事务时代值会被重置。这是意外的行为,因为事务时代应该是单调递增的,而重置为零则破坏了这种期望。我们已经添加了修复程序,以避免重置并恢复预期的事务时代行为。
二、更多内容
更多Debezium技术请参考: