为什么卡夫卡经纪人在__consumer_offsets主题中为消费者组存储重新平衡元数据?

时间:2018-08-24 02:47:58

标签: apache-kafka apache-kafka-streams

在使用Kafka Streams应用程序时,我们注意到组协调代理将重新平衡元数据存储在__consumer_offsets主题中。

由于在我们的案例中,我们有1200个流线程,因此该元数据变得非常庞大(约100 MB,无压缩,LZ4压缩后为25 MB),并且由于offsets.load.buffer.size参数的默认值仅为5MB,因此关注者相应的__consumer_offsets主题分区的代理无法读取。这导致新的GroupCoordinator在旧的GroupCoordinator发生故障时以error_code=16 (NotCoordinatorException)进行响应。

为什么经纪人为什么在__consumer_offsets主题中存储消费者组的重新平衡元数据,并且有一种方法可以禁用此功能?

1 个答案:

答案 0 :(得分:1)

出于故障转移的原因而存储组元数据。如果GroupCoordinator死亡,而另一个经纪人接管了这些组,则它需要此数据才能正常工作。这是消费者/经纪人功能,并非仅适用于Kafka Streams。

例如,新的GroupCoordinator必须知道组中有哪些成员才能应用相应的超时(即session.timeoutmax.poll.timeout)。

因此,无法禁用它,因为这对于群集正常工作至关重要。您可以更改相应的配置设置,以使代理具有足够的内存限制来处理组元数据。

对于普通的KafkaConsumers组元数据通常不会以如此快的速度增长,处理大型组通常不是问题。但是,KafkaStreams与客户端相比增加了其他元数据,并且其元数据特别大。这是一个已知问题,我相信以后会解决。