Kafka如何保证顺序消费?


一、背景

Kafka中一个topic有多个partition,在同一个partition中的消息是有序的。为什么呢?因为Kafka会将消息**追加写****到指定partition的日志文件中,所以消费消息的话也是按offset顺序消费的。

但是如果多partition的情况下,如何保证全局顺序消费呢?

二、如何保证顺序消费?

  • 单partition:前面说到同一个partition中的消息是顺序消费的,所以这种方案是可以保证顺序消费的
    • 缺点吞吐量低,不推荐
  • 指定场景有序:比如用户行为、频道信息变更等场景,都是只需要保证同一用户、同一频道的消息可以顺序消费即可,所以我们可以按照用户id、频道id做hash,来指定发送的目标partition
    • 缺点:可能导致partition消息不平均(比如用户A有100w条消息,用户B只有100条消息),可以适当调大hash的key粒度(比如用户id改为用户id+类型id)

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录