全局有序
只有 1 个分区,那这个时候就是能够保证消息的顺序消费。
分区有序
如果我们还是想同时消费多个分区并且保证有序,这个时候我们需要将需要保证顺序的消息路由到同一个分区。
在发送消息的时候我们可以看到:
上面的代码定义了消息会被送到哪一个分区,我们发现起作用的是Partitioner。
继续找发现,在这里进行赋值:
我们在ProducerConfig里面可以找到只有一段,使用了默认的分区。
它底层其实就是一个MAP来存储,所有我们要想自己分区的话可以实现下面这个接口
然后指定partitioner.class为我们的class,这样就可以自定义我们的分区逻辑,这个时候把需要放到同一个分区的数据使用同样的运算逻辑放到同一个分区即可。