mysql - 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 消息。
解决方案
我认为现在有一个选项取决于您使用的 Debezium 版本,database.history.store.only.captured.tables.ddl。
我自己没有尝试过,但我正在寻找类似的东西。该文件说明了以下内容;
一个布尔值,它指定连接器是否应该记录所有 DDL 语句 true 只记录那些与 Debezium 正在捕获其更改的表相关的 DDL 语句。设置为 true 时要小心,因为如果您更改捕获其更改的表,则可能需要丢失数据。安全默认值为 false。
我“猜想”如果您在连接器中以严格的方式控制您正在监视的表,则将其设置为 true 是安全的。
另一方面,为了恢复,您可能想尝试提高“database.history.kafka.recovery.poll.interval.ms”的值(默认值为 100 毫秒)。
祝你好运!
推荐阅读
- debian - Snort 规则配置问题
- python - 如何使用 BeautifulSoup 通过类似的 HTML 块“循环”?
- html - 推文后重定向 - 通过网站的 twitter 实现共享
- javascript - 在Javascript中,所有小数点都是奇数吗?
- sql - SQLite3 代码动态插入要删除的行数据的列值
- matlab - Matlab 2017:在标记的二进制图像中,用不同颜色填充斑点
- c# - RequiredIf GetProperty 空引用
- java - Android Firebase 数据库 limitToLast(1) 奇怪的行为
- python - python循环附加所有内容
- excel - 将具有值的动态变量列从一个工作表复制并粘贴到另一个工作表中