Apache kafka 无法重新分配kafka主题分区

Apache kafka 无法重新分配kafka主题分区,apache-kafka,Apache Kafka,卡夫卡的版本是卡夫卡2.12-2.2.0,zookeeper是3.5.4-beta 1.0启动代理 ./bin/kafka-server-start.sh -daemon config/server.properties 2.创建一个名为test的主题 ./bin/kafka-topics.sh --zookeeper 192.168.18.128:2181/kafka --topic test --create --partitions 2 --replication-factor 1 主

卡夫卡的版本是卡夫卡2.12-2.2.0,zookeeper是3.5.4-beta

1.0启动代理

./bin/kafka-server-start.sh -daemon config/server.properties
2.创建一个名为test的主题

./bin/kafka-topics.sh --zookeeper 192.168.18.128:2181/kafka --topic test --create --partitions 2 --replication-factor 1
主题测试的描述是

./bin/kafka-topics.sh --zookeeper 192.168.18.128:2181/kafka --topic test --describe
Topic:test  PartitionCount:2    ReplicationFactor:1 Configs:
Topic: test Partition: 0    Leader: 0   Replicas: 0 Isr: 0
Topic: test Partition: 1    Leader: 0   Replicas: 0 Isr: 0
3.现在我启动broker 1,我想将topic test的分区1移动到broker 1。然后我创建了一个名为reassign.json的json文件,reassign.json的内容是

{
    "version": 1, 
    "partitions": [
        {
            "topic": "test", 
            "partition": 1, 
            "replicas": [
                1
            ], 
            "log_dirs": [
                "any"
            ]
        }
    ]
}
然后我执行命令移动分区-1

./bin/kafka-reassign-partitions.sh --zookeeper 192.168.18.128:2181/kafka --reassignment-json-file json/reassign.json --execute
4.几秒钟后,我执行comand以显示上一个命令的结果

./bin/kafka-reassign-partitions.sh --zookeeper 192.168.18.128:2181/kafka --verify --reassignment-json-file json/reassign.json
Status of partition reassignment: 
Reassignment of partition test-1 is still in progress
我重试了2次,但分区的重新分配仍在进行中

5.然后我在server.log中得到以下错误日志

[2019-09-13 15:37:04,696] ERROR [KafkaApi-0] Error when handling request: clientId=0, correlationId=6, api=UPDATE_METADATA, body={controller_id=0,controller_epoch=1,broker_epoch=62,topic_states=[{topic=test,partition_states=[{partition=1,controller_epoch=1,leader=0,leader_epoch=0,isr=[0],zk_version=0,replicas=[1,0],offline_replicas=[]}]}],live_brokers=[{id=0,end_points=[{port=9092,host=ubuntu,listener_name=PLAINTEXT,security_protocol_type=0}],rack=null},{id=1,end_points=[{port=9092,host=ubuntu,listener_name=PLAINTEXT,security_protocol_type=0}],rack=null}]} (kafka.server.KafkaApis)
java.lang.IllegalStateException: Epoch 62 larger than current broker epoch 28
        at kafka.server.KafkaApis.isBrokerEpochStale(KafkaApis.scala:2414)
        at kafka.server.KafkaApis.handleUpdateMetadataRequest(KafkaApis.scala:236)
        at kafka.server.KafkaApis.handle(KafkaApis.scala:114)
        at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:69)
        at java.lang.Thread.run(Thread.java:748)

有人解决过同样的问题吗?你介意分享你的选择吗?谢谢。

我试过你的配置,一切都很好。从第5个错误中,我可以看到
分区-1
的副本是
[1,0]
,而您的复制系数是1

基于此处(检查副本):


检查您是否在某个地方添加了额外的步骤,将
代理-1
添加为
分区-1
的副本。我尝试了您的配置,所有配置都对我有好处。从第5个错误中,我可以看到
分区-1
的副本是
[1,0]
,而您的复制系数是1

基于此处(检查副本):


检查您是否在某个地方添加了额外的步骤,将
broker-1
添加为
partition-1

ErgiNushi的副本,谢谢您的回复。原因是我犯了一个错误。我有两个虚拟机,两个主机名都是ubuntu。在kafka的server.properties中,属性侦听器的值是默认值,
#listeners=PLAINTEXT://:9092
。因此,broker-0和broker-1具有相同的端点。
“端点”:[“PLAINTEXT://ubuntu:9092”
。我将node0的主机名修改为node0,node1作为node1,设置broker-0的
listeners=PLAINTEXT://node0IP:9092
,设置broker-1的
listeners=PLAINTEXT://node1IP:9092
。然后,它工作了。ErgiNushi,感谢您的回复。原因是我犯了一个错误。我有两个虚拟机,两个主机名都是ubuntu。在kafka的server.properties中,属性侦听器的值是默认值,
#listeners=PLAINTEXT://:9092
。因此,broker-0和broker-1具有相同的端点。
“端点”:[“PLAINTEXT://ubuntu:9092”
。我将node0的主机名修改为node0,node1作为node1,设置broker-0的
listeners=PLAINTEXT://node0IP:9092
,设置broker-1的
listeners=PLAINTEXT://node1IP:9092
。然后,它工作了。
[2019-09-13 15:37:04,696] ERROR [KafkaApi-0] Error when handling request: clientId=0, correlationId=6, api=UPDATE_METADATA, body={controller_id=0,controller_epoch=1,broker_epoch=62,topic_states=[{topic=test,partition_states=[{partition=1,controller_epoch=1,leader=0,leader_epoch=0,isr=[0],zk_version=0,replicas=[1,0],offline_replicas=[]}]}],live_brokers=[{id=0,end_points=[{port=9092,host=ubuntu,listener_name=PLAINTEXT,security_protocol_type=0}],rack=null},{id=1,end_points=[{port=9092,host=ubuntu,listener_name=PLAINTEXT,security_protocol_type=0}],rack=null}]} (kafka.server.KafkaApis)