一、topic 只有单个分区(partition)
Kafka 本身是保证 partiton 中消息的顺序性的,所以单分区下不用特别考虑顺序性问题。
在比较特殊的消息重试情况下,假如消息1失败了,消息2、3会排到消息1前面。若想杜绝此情况,需要把 Kafka 的max.in.flight.requests.per.connection参数设置为 1
二、topic 具有多个 partition
如果消息分散在不同的 partition,Kafka 无法保证其顺序性。但只需要确保要求顺序性的若干消息发送到同一个 partiton,即可满足其顺序性。
解读 Kafka 源码可知,key相同的消息,会发送到同一个 partition,对应源码如下:
// org.apache.kafka.clients.producer.KafkaProducer#doSend
serializedKey = keySerializer.serialize(record.topic<