Tidak dapat menetapkan ulang partisi topik kafka

Versi kafka adalah kafka_2.12-2.2.0, zookeeper adalah 3.5.4-beta.

1.mulai broker 0

./bin/kafka-server-start.sh -daemon config/server.properties

2.buat topik bernama tes

./bin/kafka-topics.sh --zookeeper 192.168.18.128:2181/kafka --topic test --create --partitions 2 --replication-factor 1

deskripsi topik tes adalah

./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.sekarang saya memulai broker 1, dan saya ingin memindahkan partisi-1 dari pengujian topik ke broker 1. Kemudian saya membuat file json bernama reassign.json, isi dari reassign.json adalah

{
    "version": 1, 
    "partitions": [
        {
            "topic": "test", 
            "partition": 1, 
            "replicas": [
                1
            ], 
            "log_dirs": [
                "any"
            ]
        }
    ]
}

Lalu saya jalankan perintah untuk memindahkan partisi-1

./bin/kafka-reassign-partitions.sh --zookeeper 192.168.18.128:2181/kafka --reassignment-json-file json/reassign.json --execute

4.Setelah beberapa detik, saya menjalankan perintah untuk menampilkan hasil perintah sebelumnya.

./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

Saya coba lagi 2 kali, bug penugasan ulang partisi masih berlangsung.

5.Kemudian saya mendapatkan error login berikut di 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)

Adakah yang pernah menyelesaikan masalah yang sama? Maukah Anda membagikan pilihan Anda? Terima kasih.


person James Peng    schedule 13.09.2019    source sumber


Jawaban (1)


Saya mencoba konfigurasi Anda dan semuanya bekerja dengan baik untuk saya. Dari error nomor 5 saya melihat replika partition-1 Anda adalah [1,0] sedangkan faktor replikasi Anda 1.

Berbasis di sini (periksa replika):

[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)

Periksa apakah Anda telah menambahkan langkah tambahan di suatu tempat yang menambahkan broker-1 sebagai replika untuk partition-1.

person Ergi Nushi    schedule 13.09.2019
comment
ErgiNushi, terima kasih atas balasan Anda. Alasannya adalah saya melakukan kesalahan. Saya memiliki dua vms, kedua nama hostnya adalah ubuntu. Dan di server.properties kafka, nilai properti pendengar adalah default, #listeners=PLAINTEXT://:9092. Akibatnya, broker-0 dan broker-1 memiliki hal yang sama endpoints."endpoints":["PLAINTEXT://ubuntu:9092"].Saya mengubah nama host node0 menjadi node0,node1 sebagai node1, dan menetapkan listeners=PLAINTEXT://node0IP:9092 dari broker-0, menetapkan listeners=PLAINTEXT://node1IP:9092 dari broker-1.Kemudian, Berhasil. - person James Peng; 13.09.2019