为什么kafka中的__consumer_offsets主题没有传播给所有经纪人?

时间:2018-05-08 11:19:45

标签: apache-kafka

我有一个 3 zk 节点群集。 7 kafka broker 节点。

因此,当我创建任何主题时,我可以使用命令行参数设置副本因子和分区。

并且这些分区会传播到所有7个代理。但是有一个主题即__consumer_offsets,它是自动创建的,它只传播到1个代理(id = 0),并且有1个复制。

我知道我可以在配置文件中更改复制因子的默认值。

但是,此主题仅复制到一个代理。那么可以更改的参数是什么,以便将分区复制到所有代理。

3 个答案:

答案 0 :(得分:2)

这对我来说真的很奇怪。我部署了3个Kafka代理群集,我的__consumer_offsets主题在3个代理之间划分了50个分区(默认),并有3个(默认)副本。 当您从单个Kafka经纪人开始,创建用于阅读主题的使用者时,您描述的内容可能会发生,因此__consumer_offsets会自动创建,并且将位于经纪人0(唯一的经纪人)上。之后,添加新的Kafka代理:不做任何操作,__consumer_offsets仍将保留在代理0上;您需要使用Kafka进行手动分区重新分配,如上所述。

答案 1 :(得分:1)

您将需要使用Kafka分区重新分配。不幸的是,目前这是一个半手工过程: https://kafka.apache.org/documentation/#basic_ops_cluster_expansion

答案 2 :(得分:0)

您需要在代理配置中将“offsets.topic.replication.factor”设置为所需的副本数。

offsets.topic.replication.factor - “抵消主题的复制因素(设置更高以确保可用性)。内部主题创建将失败,直到群集大小满足此复制因子要求。”

参考 - http://kafka.apache.org/documentation/#brokerconfigs