【Kafka】Kafka如何保证消息的有序性

  • 前提条件:生产者生产的消息是有序的,为了保证有序性,生产者采用了双端队列,保证最新消息发送失败也能最先发出。
  • 两种方案:
  • 方案一,kafka topic 只设置一个partition分区
  • 方案二,producer将消息发送到指定同一个partition分区
  • 解析:
  • 方案一:kafka默认保证同一个partition分区内的消息是有序的,则可以设置topic只使用一个分区,这样消息就是全局有序,缺点是只能被consumer group里的一个消费者消费,降低了性能,不适用高并发的情况
  • 方案二:既然kafka默认保证同一个partition分区内的消息是有序的,则producer可以在发送消息时可以指定需要保证顺序的几条消息发送到同一个分区,这样消费者消费时,消息就是有序。

【Kafka】Kafka如何保证消息的有序性_第1张图片

  • producer发送消息时具体到topic的哪一个partition分区,提供了三种方式

  • 指定分区

  • 不指定分区,有指定key 则根据key的hash值与分区数进行运算后确定发送到哪个partition分区

  • 不指定分区,不指定key,则轮询各分区发送

  • Kafka保证消息的有序性总结:生产者双端队列–>进入一个parttition–>进入一个消费者(同一个线程)–>进入一个cpu核心:保证有序性
    在这里插入图片描述

用博客见证成长,用行动证明我在努力。
如果你有缘看到我博客,对你有帮助、喜欢博客内容,请“点赞” “评论”“收藏”一键三连哦!

你可能感兴趣的:(#,Kafka,kafka)