kafka保证顺序消费
在项目中经常会出现需要保证消息有序性的需求。
1,为什么要保证消息的有序性
有些业务有前后依赖关系,比如数据更新多次,如果无序看到的就是历史数据,还有像下单支付,肯定是要先下单再去支付,由于kafka多个partition是可以并发存取的,通常为了大吞吐大多数也会采取多partition方案,并发下再加上网络传输的不确定性,就会导致后来的消息被先消费,先来的消息反而后消费
1,如何保证消息的有序性
1,topic下单个partition,此时所有的消息都落在一个parition中,自然是有序的,但是这种方案极大的降低了吞吐量
2,topic下多个partition,指定消息的key,或者指定分区,保证相同业务类型的数据落在一个分区,比如相同订单id落在同一个分区,不同id的订单可以并发写入。在消费端每个消费线程消费一个partition。