如何从Kafka集群中永久删除代理?

时间:2016-09-08 22:46:37

标签: apache-kafka

如何从Kafka群集中永久删除代理?

情景:

我有一个由3个经纪人组成的稳定集群。 我暂时添加了第四个成功加入群集的代理。控制器返回元数据,指示此代理是集群的一部分。

但是,我从未将分区重新平衡到此代理,因此这个代理#4从未实际使用过。

我后来决定从群集中删除这个未使用的代理。我成功关闭了代理,Zookeeper / broker / ids不再列出代理#4。

但是,当我们的应用程序代码连接到任何Kafka代理并获取元数据时,我们会获得包含此已删除代理的代理列表。

如何向群集指明此代理已从群集中永久删除,而不仅仅是暂时停机?

此外,导致此问题的是什么?

我猜测当我连接到代理并请求元数据时,代理会检查其本地缓存中的控制器ID,联系代理并要求它提供所有代理的列表。然后,控制器检查它的缓存列表,并在任何时间点返回已知属于该集群的所有代理的列表。

我猜这是因为它不确定死亡经纪人是永久删除还是只是暂时停工。因此,我认为我们只需要向控制器表明它需要将已知集群代理的列表重置为zookeeper中的已知实时代理。但如果我的心理模型中的某些内容不正确,那就不会感到惊讶。

这适用于Kafka 0.8.2。我计划很快升级到0.10,所以如果0.10处理不同,我也很想知道。

1 个答案:

答案 0 :(得分:1)

看起来这很可能是由于Kafka 8中的this bug,这在Kafka 9中得到了修复。