2

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 会发生什么情况?

提前致谢

4

1 回答 1

1

在 kafka 文档中找到:

public void assign(Collection<TopicPartition> partitions)

通过这种方法手动分配主题不使用消费者的组管理功能。因此,当组成员或集群和主题元数据发生变化时,不会触发重新平衡操作。请注意,不能将手动分区分配与 assign(Collection) 和组分配与 subscribe(Collection, ConsumerRebalanceListener) 一起使用。

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

于 2017-03-19T14:09:10.113 回答