当组中的一个订阅者被严格分配给特定分区时,Kafka 重新平衡
Kafka rebalancing in case when one subscriber in group has been strictly assigned to specific partition
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 会发生什么情况?
提前致谢
在 kafka 文档中找到:
public void assign(Collection<TopicPartition> partitions)
Manual topic assignment through this method does not use the consumer's group management functionality. As such, there will be no rebalance operation triggered when group membership or cluster and topic metadata change. Note that it is not possible to use both manual partition assignment with assign(Collection) and group assignment with subscribe(Collection, ConsumerRebalanceListener).
因此组中的所有消费者都应该使用手动分区分配或仅订阅(获取分区的动态分配)。
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 会发生什么情况?
提前致谢
在 kafka 文档中找到:
public void assign(Collection<TopicPartition> partitions)
Manual topic assignment through this method does not use the consumer's group management functionality. As such, there will be no rebalance operation triggered when group membership or cluster and topic metadata change. Note that it is not possible to use both manual partition assignment with assign(Collection) and group assignment with subscribe(Collection, ConsumerRebalanceListener).
因此组中的所有消费者都应该使用手动分区分配或仅订阅(获取分区的动态分配)。