canal + kafka 事务一致性问题

场景1: 在一个事务里插入两条数据,会被拆分成两个消息(in kafka)

环境配置: canal 版本v.1.1.5 + kafka (topic-partition设置为1)
canal.mq.flatMessage = true (消息以json的格式保存)

将配置进行更改: canal.mq.flatMessage = false(消息以PB的格式保存),一个事务会保存在一个消息体里,问题解决!(但没明白事务一致性,为什么会受数据存储格式的影响) 【已在官网发了个issue https://github.com/alibaba/canal/issues/3850】

场景2: 在一个事务里插入8条数据,会被拆分成两个消息(in kafka)

环境配置: canal 版本v.1.1.5 + kafka (topic-partition设置为1)
canal.mq.flatMessage = false
canal.mq.canalBatchSize = 20
kafka.batch.size = 16384

将配置更改为:
kafka batch.size: the size of a micro-batch of the producer, the default is 16K
kafka.batch.size = 32768 (不要超过1M, kafka.max.request.size)
canal.mq.canalBatchSize: get the batch size of binlog data, the default is 50K
canal.mq.canalBatchSize = 50
一个事务会保存在一个消息体里,问题解决!

你可能感兴趣的:(canal + kafka 事务一致性问题)