消息的顺序性
消息的顺序性
比如操作的逻辑是增加、修改、删除;你愣是换了顺序给执行成删除、修改、增加,不全错了么。
本来这个数据同步过来,应该最后这个数据被删除了;结果你搞错了这个顺序,最后这个数据保留下来了,数据同步就出错了。
出错的场景
RabbitMQ
一个queue,多个消费者。比如生产者向RabbitMQ发送三条数据,依次是data1/data2/data3,压入的是RabbitMQ一个内存队列,有三个消费者分别从MQ中消费这三条数据中的一条,结果消费者2执行完把data2存入数据库,之后就是data1/data3,顺序就乱了
Kafka
一个topic,有三个partition。生产者写的时候,可以指定一个key,比如指定某个订单id作为key,那么这个订单的相关数据一定会被分发到同一个partition中,这个partition数据有一定顺序。消费者从partition取出来的时候,也一定要有顺序。这里还没有错乱。但是消费者可能会搞多线程处理并发消息,导致顺序错乱。
解决方法
RabbitMQ
拆分多个queue,每个queue一个consumer;或者一个queue对应一个consumer,这个consumer内部内存队列做排序,分发给底层不同workder工作
Kafka
- 写N个内存queue,具有相同key的数据到同一个内存queue;对于N个线程,每个线程分别消费一个queue即可
Enjoy Reading This Article?
Here are some more articles you might like to read next: