【kafka】消费者对应的分配partition分区策略

  • 一个topic有多个partition,且partition分布在多个broker上
  • 一个消费组有多个consumer

这种设计让一个topic的消息可以分散存储到多个broker服务器里的partition分区中,消费组里面的消费者又能够同时消费不一样的partition分区。
解决问题:
1.实现了负载均衡(分布在多个broker上,能够同时对外提供服务)。
2.多消费者并发消费,提高kafka的吞吐量。服务器


消费者的分区策略:

现有两个主题topic一、topic2,各自都有三个partition。两个消费者并发

[topic1_partition0,topic1_partition1,topic1_partition2]
[topic2_partition0,topic2_partition1,topic2_partition2]负载均衡

  • RoundRobin 轮询,按照消费组来份,须要消费者组里面的全部的消费者订阅同一个主题。
TopicAndPartition(string Topic,integer Partition);

TopicAndPartition对象,多个主题总体排序
[topic1_partition0,topic1_partition1,topic1_partition2,topic2_partition0,topic2_partition1,topic2_partition2]ide

优势:多个消费者消费分区最多相差一个,相对均衡。设计

问题:consumer1可能彻底被分配到Topic1,Consumer2彻底消费Topic2。code

总结:轮询是按照消费者组来划分的,须要保证当前消费组里面的消费者订阅同一个topic。对象

  • Range 范围,按照topic主题来分划分。

consumer1 消费 topic1_partition0,topic1_partition1,
consumer2消费 topic1_partition2
consumer1再消费topic2_partition0,topic2_partition1
consumer2再消费topic2_partition2排序

问题:consumer2消费的少
总结:范围是按照主题来划分的。kafka

  • kafka默认采用的是range范围string

  • 何时会触发策略?消费者组里面的消费者的数量发生改变的时候(增长/减小消费者),重触发从新分配策略。
相关文章
相关标签/搜索