Apache kafka 移除代理后未更新Kafka分区引线

Apache kafka 移除代理后未更新Kafka分区引线,apache-kafka,apache-zookeeper,devops,marathon,Apache Kafka,Apache Zookeeper,Devops,Marathon,我有一个由marathon/mesos管理的Kafka集群,它有3个代理版本0.10.2.1。docker图像基于。broker.id=-1在启动时自动按顺序分配,并且引线自动重新平衡auto.leader.rebalance.enable=true。客户端版本为0.8.2.1 Zookeeper配置: ➜ zkCli-server zookeeper.example.com:2181 ls/brokers/ids [1106, 1105, 1104] ➜ zkCli-server zooke

我有一个由marathon/mesos管理的Kafka集群,它有3个代理版本
0.10.2.1
。docker图像基于。
broker.id=-1
在启动时自动按顺序分配,并且引线自动重新平衡
auto.leader.rebalance.enable=true
。客户端版本为
0.8.2.1

Zookeeper配置:

➜ zkCli-server zookeeper.example.com:2181 ls/brokers/ids
[1106, 1105, 1104]
➜ zkCli-server zookeeper.example.com:2181 get/brokers/ids/1104
{“侦听器安全协议映射”:{“明文”:“明文”},
“端点”:[“明文://host1.mesos slave.example.com:9092”],
“jmx_端口”:9999,“主机”:“host1.mesos slave.example.com”,
“时间戳”:“1500987386409”,
“端口”:9092,“版本”:4}
➜ zkCli-server zookeeper.example.com:2181 get/brokers/ids/1105
{“侦听器安全协议映射”:{“明文”:“明文”},
“端点”:[“明文://host2.mesos slave.example.com:9092”],
“jmx_端口”:9999,“主机”:“host2.mesos slave.example.com”,
“时间戳”:“1500987390304”,
“端口”:9092,“版本”:4}
➜ zkCli-server zookeeper.example.com:2181 get/brokers/ids/1106
{“侦听器安全协议映射”:{“明文”:“明文”},
“端点”:[“明文://host3.mesos slave.example.com:9092”],
“jmx_端口”:9999,“主机”:“host3.mesos slave.example.com”,
“时间戳”:“1500987390447”,“端口”:9092,“版本”:4}
➜ bin/kafka-topics.sh--zookeer zookeer.example.com:2181--create--topic test topic--partitions 2--replication factor 2
创建了主题“测试主题”。
➜ bin/kafka-topics.sh--zookeer zookeer.example.com:2181--description--topic测试主题
主题:测试主题分区计数:2复制因子:2配置:
主题:测试主题分区:0领导:1106副本:11061104 Isr:1106
主题:测试主题分区:1个领导者:1105个副本:11041105 Isr:1105
消费者可以消费生产者的产出

➜ /opt/kafka_2.10-0.8.2.1 bin/kafka-console-producer.sh--代理列表10.0.1.3:9092,10.0.1.1:9092--主题测试主题
[2017-07-25 12:57:17760]警告属性主题无效(kafka.utils.VerifiableProperties)
你好1
你好2
你好3
...
➜ /opt/kafka_2.10-0.8.2.1 bin/kafka-console-consumer.sh--zookeer zookeer.example.com:2181--topic test topic--from start
你好1
你好2
你好3
...
然后代理1104和1105(主机1和主机2)退出,另一个代理1107(主机1)将联机,手动使用marathon接口

➜ zkCli-server zookeeper.example.com:2181 ls/brokers/ids
[1107, 1106]
➜ zkCli-server zookeeper.example.com:2181 get/brokers/ids/1107
{“侦听器安全协议映射”:{“明文”:“明文”},
“端点”:[“明文://host1.mesos slave.example.com:9092”],
“jmx_端口”:9999,“主机”:“host1.mesos slave.example.com”,
“时间戳”:“1500991298225”,“端口”:9092,“版本”:4}
消费者仍然从制作人处收到消息,但主题描述看起来已过时:

主题:测试主题分区计数:2复制因子:2配置:
主题:测试主题分区:0领导:1106副本:11061104 Isr:1106
主题:测试主题分区:1个领导者:1105个副本:11041105 Isr:1105
我尝试重新平衡
kafka preferred replica election.sh
kafka重新分配分区.sh

➜ $cat all_partitions.json
{
“版本”:1,
“分区”:[
{“主题”:“测试主题”,“分区”:0,“副本”:[11061107]},
{“主题”:“测试主题”,“分区”:1,“副本”:[11071106]}
]
}
➜ bin/kafka-reassign-partitions.sh--zookeer zookeer.example.com:2181--reassignment json文件all_partitions.json--execute
➜ bin/kafka-reassign-partitions.sh--zookeer zookeer.example.com:2181--reassignment json文件all_partitions.json--verify
分区重新分配的状态:
分区[test topic,0]的重新分配已成功完成
分区[test topic,1]的重新分配仍在进行中
➜ $cat all_leaders.json
{
“分区”:[
{“主题”:“测试主题”,“分区”:0},
{“主题”:“测试主题”,“分区”:1}
]
}
➜ bin/kafka-preferred-replica-election.sh--zookeer zookeer.example.com:2181--json文件all_leaders.json的路径
已使用{“版本”:1,“分区”:[{“主题”:“测试主题”,“分区”:0},{“主题”:“测试主题”,“分区”:1}}创建首选副本选择路径
已成功启动分区集的首选副本选择([测试主题,0],[测试主题,1])
分区1的分区引线仍然是1105,这没有任何意义:

➜ bin/kafka-topics.sh--zookeer zookeer.example.com:2181--description--topic测试主题
主题:测试主题分区计数:2复制因子:2配置:
主题:测试主题分区:0领导:1106副本:11061107 Isr:11061107
主题:测试主题分区:1个领导者:1105个副本:1107110611041105 Isr:1105

为什么分区1认为虽然主机2不存在,但leader仍然是1105?

我在Apache kafka 2.11中也面临着类似的问题。拥有一个由3个代理组成的集群,主题为分区=2,复制因子=1。因此,我的主题的分区分布在3个代理中的2个。在生成消息的过程中,我手动关闭了其中一个分区所在的代理。经过相当长的时间后,前面提到的分区的前导继续显示为-1。即分区没有转移到第三个活动和正在运行的代理。我已在所有代理上将
auto.leader.rebalance.enable设置为true。另外,Producer客户端一直试图生成到shut doen代理上的分区,但仍然无法生成。

我在Apache kafka 2.11中也遇到了类似的问题。拥有一个由3个代理组成的集群,主题为分区=2和复制因子