Kafka中Partition(分区)是真正保存消息的地方,发送的消息都被放在这里。

Kafka如何保证消息的消费顺序_数据

每次添加消息到Partition(分区)的时候都会采用尾加法,如上图所示。Kafka只能保证Partition(分区)中的消息有序,而不能保证Topic(主题)中的Partition(分区)的有序。

消息在被追加到Partition(分区)的时候都会分配一个特定的偏移量(offset)。Kafka通过偏移量(offset)来保证消息在分区内的顺序性。

所以,有一种很简单的保证消息消费顺序的方法:1哥Topic只对应一个Partition。这样可以解决问题,但是破坏了Kafka的设计初衷。

Kafka中发送1条消息的时候,可以指定topic、partition、key、data(数据)4个参数。如果你发送消息的时候指定了Partition的话,所有消息都会被发送到指定的Partition。并且,同一个key的消息可以保证只发送至到同一个partition。这个可以采用表/对象的id来作为key。

总结下,对于如何保证Kafka中消息消费的顺序,有下面两种方法:

1.1个Topic只对应一个Partition。

2.发送消息的时候指定key/partition。