ไม่สามารถกำหนดพาร์ติชันหัวข้อคาฟคาใหม่ได้

เวอร์ชันของ kafka คือ kafka_2.12-2.2.0 ส่วนผู้ดูแลสัตว์คือ 3.5.4-เบต้า

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. ตอนนี้ฉันเริ่มโบรกเกอร์ 1 และฉันต้องการย้ายพาร์ติชัน 1 ของการทดสอบหัวข้อไปยังโบรกเกอร์ 1 จากนั้นฉันสร้างไฟล์ json ชื่อ reassign.json เนื้อหาของ reassign.json คือ

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

จากนั้นฉันก็รันคำสั่งเพื่อย้าย partition-1

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

4.หลังจากนั้นไม่กี่วินาที ฉันก็รันคำสั่งเพื่อแสดงผลลัพธ์ของคำสั่งก่อนหน้า

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

มีใครแก้ไขปัญหาเดียวกันบ้างไหม? คุณช่วยแบ่งปันตัวเลือกของคุณได้ไหม? ขอบคุณ.


person James Peng    schedule 13.09.2019    source แหล่งที่มา


คำตอบ (1)


ฉันลองกำหนดค่าของคุณแล้วและทุกอย่างทำงานได้ดีสำหรับฉัน จากข้อผิดพลาดที่หมายเลข 5 ฉันเห็นว่าแบบจำลองของ partition-1 ของคุณคือ [1,0] ในขณะที่คุณมีปัจจัยการจำลองแบบเป็น 1

อ้างอิงจากที่นี่ (ตรวจสอบแบบจำลอง):

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

ตรวจสอบว่าคุณได้เพิ่มขั้นตอนพิเศษที่เพิ่ม broker-1 เป็นแบบจำลองสำหรับ partition-1 หรือไม่

person Ergi Nushi    schedule 13.09.2019
comment
เออร์จินูชิขอบคุณสำหรับการตอบกลับของคุณ เหตุผลก็คือฉันทำผิดพลาด ฉันมีสอง vms ชื่อโฮสต์ทั้งสองคือ ubuntu และใน server.properties ของ kafka ค่าของผู้ฟังคุณสมบัติเป็นค่าเริ่มต้น #listeners=PLAINTEXT://:9092 ด้วยเหตุนี้โบรกเกอร์-0 และโบรกเกอร์-1 จึงมีค่าเท่ากัน จุดสิ้นสุด."endpoints":["PLAINTEXT://ubuntu:9092"].ฉันแก้ไขชื่อโฮสต์ของ node0 เป็น node0, node1 เป็น node1 และตั้งค่า listeners=PLAINTEXT://node0IP:9092 ของโบรกเกอร์-0 ตั้งค่า listeners=PLAINTEXT://node1IP:9092 ของโบรกเกอร์-1 จากนั้น มันได้ผล - person James Peng; 13.09.2019