Kafka学习(五) 消息分区

消息分区策略

这里不是说Kafka的主题为什么要分区,而是说在分区的结构下,如何让具有某种特点的消息发送到特定分区。

这里有一个很明显的问题,就是主题分区,那么生产者发送的消息到底被发送到了哪个分区呢?一般我们都知道有轮询机制或者是随机机制,这两种机制都比较好理解。而且Kafka也都支持,在新版本中默认使用的是轮询机制,如下图所示:

Kafka学习(五)  消息分区

但是在某些场景下我们需要控制某种类型的消息发送到特定分区或者说我们需要严格的进行消息的顺序消费,也就是说这些消息有因果关系,要想消费下一条必须先要消费前一条。消费者消费某个分区的消息肯定是顺序消费,但是由于消息不是顺序进入分区的,你可以从上图看到0002消息并不是在0001消息之后,这就导致有可能消费者程序先消费了0002。如果这些消息没有因果关系那么则没问题,只要保证消费者都消费完就可以了至于先后顺序无需关心。但是如果有因果关系就不行,这样会造成混乱。

要想实现因果关系的消费可以有2个办法

单分区模式

Kafka学习(五)  消息分区

我们创建一个具有单分区的主题,这样消息就顺序进入分区,消费者也就顺序消费。这样实现了全局顺性,不过这样就降低了吞吐量。

基于消息Key的分区策略

Kafka学习(五)  消息分区

这种就是为消息设置Key,Key相同的发送到同一分区。要注意这里虽然是多个分区看似吞吐量增加,但是你可以设想一下如果你的因果消息Key都一样那么这种模式和上面的单分区模式其实一样。如果你的因果消息可以继续细分为几个不同的Key,那么在多分区模式下相对于整体来讲吞吐量是提高的。

如何使用

kafka-python 模块的使用

Java客户端的使用

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Kafka学习(五) 消息分区 - Python技术站

(0)
上一篇 2023年4月2日 下午5:19
下一篇 2023年4月2日 下午5:19

相关文章

  • Kafka学习(三) 主题、分区与副本

    主题、分区与副本 基本概念 主题、分区和副本的关系 主题是一个逻辑概念,代表了一类消息,实际工作中我们使用主题来区分业务,而主题之下并不是消息,而是分区,分区是一个物理概念,它是磁盘上的一个目录,目录中是保存消息的日志段文件。分区的目的是为了提高吞吐量,实现主题的负载均衡,一个主题至少有一个分区;而故障转移这个功能就放在了副本上,一个分区至少有一个副本,一个…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部