如何保证消息执行的顺序性
顺序错乱的场景
RabbitMQ
一个queue,多个consumer
Kafka
一个topic,一个 partition,一个consumer 内部多线程
如何保证消息的顺序性
rabbitMQ
拆分多个queue,每个queue一个consumer,就是多一些queue而已,或者一个queue但是对应一个consumer,然后这个consumer内部用内存队列做排队,然后分发给底层不同的worker执行
Kafka
一个topic,一个partition,一个consumer,内部单线程消费,写n个内存queue,然后n个线程分别消费一个内存queue即可
kafka可以保证一点,写到一个partition中的数据一定是有顺序性的,因为partition本地会维护一个offset索引
并且Kafka可以保证的是一个partition只会被一个消费者消费,也就是说,如果只有三个partition,但是有四个消费者,会导致一个消费者并没有消费数据,而在等待中
kafka压测数据
如果消费者是单线程消费+处理,如果处理比较耗时,每个消息消费需要几十ms,这样的话一秒钟只能处理几十条数据,这个吞吐量太低了
所以消费者肯定是要用多线程去并发的处理消息,消费者的线程一般是4核8G的机器,单机32条线程,最高每秒可以处理上千条信息