首页 > 解决方案 > Debezium Mysql 连接器因 IllegalStateException 而失败,历史主题具有无限保留

问题描述

我们运行了一个 Debezium MySQL 连接器,其中历史主题已经无限保留。但奇怪的是,连接器突然失效,但出现以下异常

"org.apache.kafka.connect.errors.ConnectException: java.lang.IllegalStateException: 
The database history couldn't be recovered. 
Consider to increase the value for database.history.kafka.recovery.poll.interval.ms

我注意到的另一件事是,由于在被监视的数据库中创建和删除临时表(没有被 debezium 连接器跟踪),因此有大量消息被插入到历史主题中。这些消息会是连接器无法读取历史主题消息的原因吗?我们考虑为历史主题启用日志压缩,但注意到一些建议不要启用相同的问题。https://issues.redhat.com/browse/DBZ-239

删除历史主题并在schema_recovery模式下重新启动连接器可以很好地重新启动连接器,但想知道可以采取哪些措施来避免这些类型的中断。是否有任何选项只允许为被监视的表存储 DDL 消息。

标签: mysqlapache-kafka-connectcdcdebezium

解决方案


我认为现在有一个选项取决于您使用的 Debezium 版本,database.history.store.only.captured.tables.ddl

我自己没有尝试过,但我正在寻找类似的东西。该文件说明了以下内容;

一个布尔值,它指定连接器是否应该记录所有 DDL 语句 true 只记录那些与 Debezium 正在捕获其更改的表相关的 DDL 语句。设置为 true 时要小心,因为如果您更改捕获其更改的表,则可能需要丢失数据。安全默认值为 false。

我“猜想”如果您在连接器中以严格的方式控制您正在监视的表,则将其设置为 true 是安全的。

另一方面,为了恢复,您可能想尝试提高“database.history.kafka.recovery.poll.interval.ms”的值(默认值为 100 毫秒)。

祝你好运!


推荐阅读