如果组中的一个订阅者已严格分配到特定分区{K44ka},则会重新平衡

时间:2017-03-16 10:51:50

标签: java apache-kafka message-queue kafka-consumer-api rebalancing

Kafka重新平衡旨在将主题的所有分区重新分配给订阅者组的活动成员,以便任何给定时刻只有一个消费者使用任何主题分区。因此,如果消费者刚刚订阅了某个主题,那么一切都很清楚,但消费者API也提供了一种为消费者分配特定分区的方法:

void assign(Collection<TopicPartition> partitions)

现在假设我们有:

  • 包含5个分区的主题:1,2,3,4,5
  • 一个有3名成员的消费者团体:1,2,3
  • 成员1和2 刚刚订阅了主题,成员3 已将分区1指定给自己

那么重新平衡在这种情况下会如何运作?分区1是否总是被分配给成员3(当它处于活动状态时),导致其他成员只能从其他分区(2,3,4,5)读取?组协调器还可以为成员3分配另一个分区吗?如果成员3发生故障并且稍后返回,分区1会发生什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

在kafka docs中找到:

  

public void assign(Collection<TopicPartition> partitions)

     

通过此方法分配手动主题不会使用使用者的组管理功能。因此,当组成员身份或群集和主题元数据更改时,将不会触发重新平衡操作。请注意,不能同时使用assign(Collection)手动分区赋值和subscribe(Collection,ConsumerRebalanceListener)分组。

因此,组中的所有使用者都应使用手动分区分配或仅使用订阅(获取分区的动态分配)。