Kafka重新平衡旨在将主题的所有分区重新分配给订阅者组的活动成员,以便任何给定时刻只有一个消费者使用任何主题分区。因此,如果消费者刚刚订阅了某个主题,那么一切都很清楚,但消费者API也提供了一种为消费者分配特定分区的方法:
void assign(Collection<TopicPartition> partitions)
现在假设我们有:
那么重新平衡在这种情况下会如何运作?分区1是否总是被分配给成员3(当它处于活动状态时),导致其他成员只能从其他分区(2,3,4,5)读取?组协调器还可以为成员3分配另一个分区吗?如果成员3发生故障并且稍后返回,分区1会发生什么?
提前致谢
答案 0 :(得分:1)
在kafka docs中找到:
public void assign(Collection<TopicPartition> partitions)
通过此方法分配手动主题不会使用使用者的组管理功能。因此,当组成员身份或群集和主题元数据更改时,将不会触发重新平衡操作。请注意,不能同时使用assign(Collection)手动分区赋值和subscribe(Collection,ConsumerRebalanceListener)分组。
因此,组中的所有使用者都应使用手动分区分配或仅使用订阅(获取分区的动态分配)。