消息的顺序性


消息的顺序性

比如操作的逻辑是增加、修改、删除;你愣是换了顺序给执行成删除、修改、增加,不全错了么。

本来这个数据同步过来,应该最后这个数据被删除了;结果你搞错了这个顺序,最后这个数据保留下来了,数据同步就出错了。

出错的场景

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:

  • 2379. Minimum Recolors to Get K Consecutive Black Blocks
  • 2471. Minimum Number of Operations to Sort a Binary Tree by Level
  • 1387. Sort Integers by The Power Value
  • 2090. K Radius Subarray Averages
  • 2545. Sort the Students by Their Kth Score