canal使用rocketmq做数据同步的问题
因为要保证数据的顺序,所以要使用rocketmq的顺序topic,保证在发送和消费端都是用rocketmq顺序topic的对应api来保证顺序
- canal.mq.partitionsNum设置同步数据的队列数,一旦设置就不能更改,此时rocketmq后端broker如果有增减机器,会造成队列数变化,canal就会报错
- 这个问题的本质是canal如果要稳定保证顺序的话一定要依赖一个队列数不变的顺序topic,否则在队列数变化的瞬间会有些数据无法保证顺序
- 所以要避免这个问题,可以保证rocketmq的队列数不变,使用自建rocketmq集群还好,如果使用云rocketmq是无法保证队列数不变的。而且队列数不变也意味着rocketmq集群无法扩缩容
- 还有一种方式就是canal中不要指定队列数,通过rocketmq提供的api自动感知topic的队列数,并且明确告诉用户当队列数有变化的瞬间无法保证数据顺序