Debezium Mysql 连接器因 IllegalStateException 而失败,历史主题具有无限保留
Posted
技术标签:
【中文标题】Debezium Mysql 连接器因 IllegalStateException 而失败,历史主题具有无限保留【英文标题】:Debezium Mysql Connector Failed with IllegalStateException for history topic with infinite retention 【发布时间】:2020-11-30 17:30:15 【问题描述】:我们运行了一个 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 消息。
【问题讨论】:
【参考方案1】:我认为现在有一个选项取决于您使用的 Debezium 版本,database.history.store.only.captured.tables.ddl。
我自己没有尝试过,但我正在寻找类似的东西。该文档说明了以下内容;
一个布尔值,指定连接器是否应记录所有 DDL 语句 true 仅记录那些与 Debezium 正在捕获其更改的表相关的 DDL 语句。设置为 true 时要小心,因为如果您更改捕获其更改的表,则可能需要丢失数据。 安全的默认值为 false。
我猜如果您在连接器中以严格的方式控制您正在监控的表,将其设置为 true 是安全的。
另一方面,为了恢复,您可能想尝试提高“database.history.kafka.recovery.poll.interval.ms”的值(默认为 100 毫秒)。
祝你好运!
【讨论】:
以上是关于Debezium Mysql 连接器因 IllegalStateException 而失败,历史主题具有无限保留的主要内容,如果未能解决你的问题,请参考以下文章
Debezium - MySQL 连接器 - Kinesis - 服务未启动
如何为 mysql 数据库创建多个 Debezium 连接器