我们有一个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"的值(默认值为100ms(。
祝你好运!