我们通过 AWS MSK 无服务器和 MSK Connect 使用 Debezium 来监控 RDS Aurora MySQL 的 binlog。 对于我们 99% 的数据,这一切都工作正常,但 Debezium 偶尔会失败:
[Worker-0ee2268e7e753a81a] org.apache.kafka.common.errors.RecordTooLargeException: The message is 12472229 bytes when serialized which is larger than 8388608, which is the value of the max.request.size configuration.
MSK 无服务器的最大消息大小为 8mb,因此我们解决此问题的唯一方法是更新 debezium 偏移量以跳过 binlog 事件,这是耗时且有问题的。
在谷歌上搜索此错误时,我发现了很多有关如何增加代理最大消息大小的建议,但在这种情况下这对我们不起作用,因为它已由 AWS 修复。
我们已经尝试过:
event.processing.failure.handling.mode=warn
connector.client.config.override.policy=ALL
producer.override.max.request.size=8388608
使用 debezium/kafka connect 时是否有办法忽略/调整过大的 binlog 事件?
解决此问题的一种通用方法是使用 SMT(也许使用原始字节大小进行过滤)。你可以自己动手扔一个记录 有一些可用的预设过滤器(不是基于大小的,但如果有办法可以从源中提取一些包含大消息的字段,这可以是一个开始),类似于:https://docs。 confluence.io/platform/current/connect/transforms/filter-ak.html