业务场景 :
多系统之间 数据同步、共享、并根据mysql 事物 要求 kafka 消费者也具有事务特性
解决方案:
canal 订阅 mysql binlog 发送到kafka ,业务线充当消费者 去消费不同的数据
遇到的问题
canal 订阅binlog 时 生产到kafka 的数据是多个分区 导致 消费者处理的事务和mysql 不一致
问题原因
kafka存在多个分区导致 mysql 一个事务 分发到了 多个分区 导致了mysql 一个事务 consumer 消费多次
解决方案
将canal 订阅到的数据发送到kafka 的一个 分区 ,但是这样造成一个问题 : 消费缓慢
优美解决方案
kafka 保持多个分区(3) consumer 在消费时 保持数据格式不变 。比如 mysql 在一个事务中更新了10条记录 这10 条记录 可能的分配方式 : p1 3条记录 ,p2 3条记录 ,p3 4条记录 ,在不影响消费者业务的前提下 保证 这3次的消费数据格式一致