【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.5
【复现路径】
【遇到的问题:问题现象及影响】
ticdc发送消息到kafka, 使用 canal-json
协议, max-message-bytes设置100M,但是在kafka端收到超过800M的消息,导致kafka报错,消息无法发送。
changefeed配置和 kafka报错信息:
【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.5
【复现路径】
【遇到的问题:问题现象及影响】
ticdc发送消息到kafka, 使用 canal-json
协议, max-message-bytes设置100M,但是在kafka端收到超过800M的消息,导致kafka报错,消息无法发送。
changefeed配置和 kafka报错信息:
kafka默认消息最大大小是1MB。
可以考虑使用 TiCDC 的数据压缩功能,通过配置 large-message-handle-compression
参数(如 lz4
或 snappy
),在发送到 Kafka 之前压缩消息,以减少消息大小。
https://docs.pingcap.com/zh/tidb/stable/ticdc-sink-to-kafka#ticdc-层数据压缩功能
kafka的消息大小已经做过设置了
压缩功能 v7.4 才支持
没注意你的版本……
考虑下升级到 v7.5吗?
刚升级到v7.1.5不久,优先看看什么问题,是不是bug,目前版本有没有办法绕过,实在不行再考虑升级问题
麻烦提供一下 kafka 的版本号。
上面的截图中有,3.1.0
message.max.bytes
参数值,将其调大到1GB(1073741824
)。replica.fetch.max.bytes
参数值,同样调大到1GB(1073741824
)。fetch.message.max.bytes
参数值,确保它大于message.max.bytes
。large-message-handle-option
参数:changefeed
配置中设置large-message-handle-option = "handle-key-only"
,这样当消息超过大小时,只会发送Handle Key。先不要操作,我们这边还在调查。
错误来自于 nio 层,调大 socket.requet.max.bytes 参数。
看了下kafka的参数,目前设置为:
socket.request.max.bytes=904857600 //900M了
socket.request.timeout.ms=60000
设置完了之后,又出现更大的值,最大的都1.8G了
请提供一下监控. sink-MQ Sink 部分,尤其是 outgoing bytes 这块儿。
你们的数据,最大大小大概在多少?设置到 100mb 的目的是什么?
检查 cdc 日志,是否有 “invalid request size ” 内容,有的话提供一下。
没有这么大的消息,现在调整到20M,还是报错。 设置大一点主要考虑支持批量发送,性能会高一点。
cdc的日志中看不到以上错误信息, 错误日志是kafka端的。 因为kafka那边报错,导致cdc这边发送消息性能很低, 好像也在推进,很慢。
提供一下 kafka 相关监控内容呢。
监控看起来,outgoing bytes 数量很低,这个值是对每一个 request 大小的记录,也就是说发送端实际每次发送的数据大小。