ticdc同步到kafka配置问题

tidb 6.1.7版本

问题:下游kafka限制了网络包大小为4MB,但是ticdc配置如下(一个任务是单个表),还是会触发【 Message was too large, server rejected it to avoid allocation error.】
“max-batch-size”: “4”, (官方文档表示这个参数不生效,默认值是16,但是即便是16,也不应该报错才对)
“max-message-bytes”: “262144”
“protocol” : “maxwell”

PS:kafka max-message限死4MB,无法修改,只能控制ticdc的配置。之前使用4.0.13版本遇到这个问题,官方建议升级,然后升级到4.0.16还是有问题,现在升级到6.1.7还是有问题,表示很崩溃啊。

可以改配置

这个配置项可以修改的啊,你的kafka里的配置呢?

config/server.properties 加上这些参数
#broker能接收消息的最大字节数
message.max.bytes=200000000
#broker可复制的消息的最大字节数
replica.fetch.max.bytes=204857600
#消费者端的可读取的最大消息
fetch.message.max.bytes=204857600

我的意思,kafka是别人的系统,不归dba管,dba只是用户端,服务端不支持变更配置,人家是统一管理配置的

可以自建kafka

是你下游kafka拒绝收包呀

你应该让下游kafka修改,增加限制值

数据就和水一样,流到下游水管变小了,你要么限流cdc流量,要么改大下游kafka接受的管子粗度

使用的协议是 maxwell,该协议会对多个事件做 batch 操作。从源代码上看,max-batch-size 在该协议上是不生效的。maxwell 不是 TiCDC 官方 GA 的协议。

从给出的配置来看,max-message-bytes 给的值是 262144,即 256k。如果一次性 batch 的消息大小操过该值,就会发生 message too large 的做错。

即然你的下游 kafka 给的消息大小限制是 4MB,你完全可以不用管该参数啊,或者也给个 4MB 即可。

试过仅配置max-message-bytes=4MB的,但是也报错,所以现在都不知道要咋配置了

从诸多协议测试来看maxwell可读性比较好,所以最终敲定这个协议,那官方GA的协议是哪个呢,建议使用哪个协议呢,针对这种下游kafka限死4MB的场景,在该协议下,ticdc端的参数又怎么配置呢

  1. 目前官方推荐使用的是 canal-json 和 open-protocol。
  2. 如果使用 canal-json,直接使用默认的参数配置即可。
  3. canal-json 是单个 DML event 就是一条 kafka 消息。Open-Protocol 是多个 DML events 一条 Kafka 消息,max-batch-size 参数生效。
  4. 参数直接使用默认的即可。

好嘞,那这个是有版本限制吗。是否适用于4.0.13版本或者4.0.16版本?
现在我们是测试阶段,如果canal-json在4.0.13版本也生效,那我们就可以先不用升级了