我有一个 3 zk 节点群集。 7 kafka broker 节点。
因此,当我创建任何主题时,我可以使用命令行参数设置副本因子和分区。
并且这些分区会传播到所有7个代理。但是有一个主题即__consumer_offsets
,它是自动创建的,它只传播到1个代理(id = 0),并且有1个复制。
我知道我可以在配置文件中更改复制因子的默认值。
但是,此主题仅复制到一个代理。那么可以更改的参数是什么,以便将分区复制到所有代理。
答案 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
- “抵消主题的复制因素(设置更高以确保可用性)。内部主题创建将失败,直到群集大小满足此复制因子要求。”