xxxxxxxx
(Hacker Z Vu Xy Nh8)
1
tidb 4.0.13
最近线上的ticdc任务遇到了如下报错:
ticdc 的max-message-bytes=4m,kafka max.message.bytes也是4m,max-batch-size使用默认值(官方文档介绍该版本是16),虽然后来更新max-message-bytes=2m后报错得到解决,但是想了解一下ticdc的配置参数是怎么限制包大小的,为什么会出现这个报错。
从原生的Kafka里的参数里,生产侧的Producer里约束消息大小的是max.request.size,而mesaage.max.bytes的作用域是基于Kafka服务侧的。
1、想确认一下ticdc配置任务里面的 max-message-bytes参数是否是对应到kafka的max.message.bytes(topic级别配置)参数
2、ticdc是否有对应的参数支持限制kafka的max.request.size参数。
3、配置max-message-bytes=2097152但是查出来的结果里面有个opts显示的是4m,这两个有什么区别呢
根据您提供的信息,可以看出 TiCDC 报错的原因是消息大小超过了 max-message-bytes 的限制。TiCDC 中的 max-message-bytes 参数值,不大于 Kafka Topic 的 max.message.bytes 参数值。因此,您需要根据单条 row 数据大小修改 TiCDC 和 Kafka 参数值满足以上条件。
回答您的问题:
-
是的,TiCDC 配置任务里面的 max-message-bytes 参数对应到 Kafka 的 max.message.bytes(topic 级别配置)参数。TiCDC 的 max-message-bytes 参数是用来限制 TiCDC 发送到 Kafka 的消息大小的。
-
TiCDC 没有对应的参数支持限制 Kafka 的 max.request.size 参数。max.request.size 是 Kafka 生产侧的 Producer 用来约束消息大小的参数,TiCDC 无法直接控制。
-
max-message-bytes=2097152 是 TiCDC 配置任务时设置的参数值,而 opts 显示的是 4m,这两个参数的区别在于单位不同。max-message-bytes 的单位是字节,而 opts 显示的是以 MB 为单位的值。因此,4m 对应的字节数是 4194304,大于您设置的 max-message-bytes=2097152。
xxxxxxxx
(Hacker Z Vu Xy Nh8)
3
现在我们的Kafka 的 max.message.bytes限制了4m,现在能保证的是,单行数据肯定不会超过4m,现在cdc max-message-bytes 配置4m,2m,1m都会报错(ticdc任务有9个表,每个表的单行都不会超过4m,但是存在同时刻各个表都有变更),所以现在想请问ticdc建议怎么配置才不会导致报这个错误呢。
xxxxxxxx
(Hacker Z Vu Xy Nh8)
5
只要满足 cdc max-message-bytes * max-batch-size <= Kafka 的 max.message.bytes
就不会出现再这个报错?