kafka 4.2.0 集群扩缩容
环境介绍
节点说明
现有节点
kafka1: 192.168.56.104 broker,controller
kafka2: 192.168.56.105 broker,controller
kafka3: 192.168.56.106 broker,controller
新增节点
kafka4: 192.168.56.107 broker,controller
kafka5: 192.168.56.108 broker,controller
集群信息
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 1
HighWatermark: 70
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: []
数据分布
bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe
Topic: wgs-test-event TopicId: 1UvmCx6tTUGN1eMP6XBv6w PartitionCount: 18 ReplicationFactor: 3 Configs: min.insync.replicas=1,segment.bytes=1073741824
Topic: wgs-test-event Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 3 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 4 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 5 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 6 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 7 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 8 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 9 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 10 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 11 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 12 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 13 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 14 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 15 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 16 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 17 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr: LastKnownElr:
新增 broker 节点
broker 节点配置
process.roles=broker
node.id=4
controller.quorum.bootstrap.servers=192.168.56.104:9093,192.168.56.105:9093,192.168.56.106:9093
listeners=PLAINTEXT://192.168.56.107:9093
log.dirs=/data/kafka
格式化存储目录
bin/kafka-storage.sh format --cluster-id iTWPNNdzQ0unJAP9_RDwRg --config config/server.properties
运行服务
bin/kafka-server-start.sh config/server.properties
查看集群信息
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 1
HighWatermark: 603
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: [{"id": 4, "directoryId": "RA_qcmqvMd_YyrUq4i70Lw"}]
重新分配分区
生成迁移计划
topic 配置信息
cat > topics-to-move.json <<EOF
{
"topics": [
{"topic": "wgs-test-event"}
],
"version": 1
}
EOF
生成重分配计划
此命令会输出两个 JSON 块:Current partition replica assignment和 Proposed partition reassignment configuration。将后者复制到一个新文件 reassign-execute.json
bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.56.104:9092 --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3,4" --generate
Current partition replica assignment
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":1,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":2,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":3,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":4,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":6,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":8,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":9,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":10,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":11,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":13,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":15,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":16,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":17,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]}]}
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,4,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":6,"replicas":[4,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":8,"replicas":[4,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":9,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":10,"replicas":[3,2,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":11,"replicas":[2,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":13,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":15,"replicas":[2,3,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,4,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":17,"replicas":[4,3,2],"log_dirs":["any","any","any"]}]}
reassign-execute.json
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,4,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":6,"replicas":[4,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":8,"replicas":[4,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":9,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":10,"replicas":[3,2,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":11,"replicas":[2,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":13,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":15,"replicas":[2,3,4],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,4,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":17,"replicas":[4,3,2],"log_dirs":["any","any","any"]}]}
执行重分配
./bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.56.104:9092 --reassignment-json-file reassign-execute.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":1,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":2,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":3,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":4,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":6,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":8,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":9,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":10,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":11,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":13,"replicas":[2,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":15,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":16,"replicas":[2,3,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":17,"replicas":[3,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for wgs-test-event-0,wgs-test-event-1,wgs-test-event-2,wgs-test-event-3,wgs-test-event-4,wgs-test-event-5,wgs-test-event-6,wgs-test-event-7,wgs-test-event-8,wgs-test-event-9,wgs-test-event-10,wgs-test-event-11,wgs-test-event-12,wgs-test-event-13,wgs-test-event-14,wgs-test-event-15,wgs-test-event-16,wgs-test-event-17
监控进度
./bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.56.104:9092 --reassignment-json-file reassign-execute.json --verify
Status of partition reassignment:
Reassignment of partition wgs-test-event-0 is completed.
Reassignment of partition wgs-test-event-1 is completed.
Reassignment of partition wgs-test-event-2 is completed.
Reassignment of partition wgs-test-event-3 is completed.
Reassignment of partition wgs-test-event-4 is completed.
Reassignment of partition wgs-test-event-5 is completed.
Reassignment of partition wgs-test-event-6 is completed.
Reassignment of partition wgs-test-event-7 is completed.
Reassignment of partition wgs-test-event-8 is completed.
Reassignment of partition wgs-test-event-9 is completed.
Reassignment of partition wgs-test-event-10 is completed.
Reassignment of partition wgs-test-event-11 is completed.
Reassignment of partition wgs-test-event-12 is completed.
Reassignment of partition wgs-test-event-13 is completed.
Reassignment of partition wgs-test-event-14 is completed.
Reassignment of partition wgs-test-event-15 is completed.
Reassignment of partition wgs-test-event-16 is completed.
Reassignment of partition wgs-test-event-17 is completed.
Clearing broker-level throttles on brokers 1,2,3,4
Clearing topic-level throttles on topic wgs-test-event
验证数据分布
bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe
Topic: wgs-test-event TopicId: 1UvmCx6tTUGN1eMP6XBv6w PartitionCount: 18 ReplicationFactor: 3 Configs: min.insync.replicas=1,segment.bytes=1073741824
Topic: wgs-test-event Partition: 0 Leader: 4 Replicas: 4,1,2 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 2 Leader: 2 Replicas: 2,3,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 3 Leader: 3 Replicas: 3,4,1 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 4 Leader: 2 Replicas: 2,1,4 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 5 Leader: 1 Replicas: 1,4,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 6 Leader: 4 Replicas: 4,3,2 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 7 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 8 Leader: 4 Replicas: 4,1,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 9 Leader: 1 Replicas: 1,3,2 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 10 Leader: 3 Replicas: 3,2,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 11 Leader: 2 Replicas: 2,4,1 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 12 Leader: 3 Replicas: 3,4,1 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 13 Leader: 4 Replicas: 4,1,2 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 14 Leader: 1 Replicas: 1,2,3 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 15 Leader: 2 Replicas: 2,3,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 16 Leader: 1 Replicas: 1,4,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 17 Leader: 4 Replicas: 4,3,2 Isr: 2,3,4 Elr: LastKnownElr:
删除 broker 节点
删除 Broker 4 节点
检查集群健康
bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe
Topic: wgs-test-event TopicId: 1UvmCx6tTUGN1eMP6XBv6w PartitionCount: 18 ReplicationFactor: 3 Configs: min.insync.replicas=1,segment.bytes=1073741824
Topic: wgs-test-event Partition: 0 Leader: 4 Replicas: 4,1,2 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 2 Leader: 2 Replicas: 2,3,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 3 Leader: 3 Replicas: 3,4,1 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 4 Leader: 2 Replicas: 2,1,4 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 5 Leader: 1 Replicas: 1,4,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 6 Leader: 4 Replicas: 4,3,2 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 7 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 8 Leader: 4 Replicas: 4,1,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 9 Leader: 1 Replicas: 1,3,2 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 10 Leader: 3 Replicas: 3,2,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 11 Leader: 2 Replicas: 2,4,1 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 12 Leader: 3 Replicas: 3,4,1 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 13 Leader: 4 Replicas: 4,1,2 Isr: 1,2,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 14 Leader: 1 Replicas: 1,2,3 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 15 Leader: 2 Replicas: 2,3,4 Isr: 2,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 16 Leader: 1 Replicas: 1,4,3 Isr: 1,3,4 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 17 Leader: 4 Replicas: 4,3,2 Isr: 2,3,4 Elr: LastKnownElr:
生成分区重分配计划
topics-to-move.json
cat > topics-to-move.json <<EOF
{
"topics": [
{"topic": "wgs-test-event"}
],
"version": 1
}
EOF
生成重分配计划
将输出的 Proposed partition reassignment configuration部分保存为 reassign-execute.json。
./bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.56.104:9092 --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3" --generate
Current partition replica assignment
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[4,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":1,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":2,"replicas":[2,3,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,4,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":6,"replicas":[4,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":8,"replicas":[4,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":9,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":10,"replicas":[3,2,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":11,"replicas":[2,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":13,"replicas":[4,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":15,"replicas":[2,3,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,4,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":17,"replicas":[4,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]}]}
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":1,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":2,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":6,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":8,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":9,"replicas":[2,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":10,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":11,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":12,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":13,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":14,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":15,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":17,"replicas":[2,3,1],"log_dirs":["any","any","any"]}]}
reassign-execute.json
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":1,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":2,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":6,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":8,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":9,"replicas":[2,1,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":10,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":11,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":12,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":13,"replicas":[2,3,1],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":14,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":15,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"wgs-test-event","partition":17,"replicas":[2,3,1],"log_dirs":["any","any","any"]}]}
执行分区重分配
./bin/kafka-reassign-partitions.sh \
--bootstrap-server 192.168.56.104:9092 \
--reassignment-json-file reassign-execute.json \
--execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"wgs-test-event","partition":0,"replicas":[4,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":1,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":2,"replicas":[2,3,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":3,"replicas":[3,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":4,"replicas":[2,1,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":5,"replicas":[1,4,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":6,"replicas":[4,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":7,"replicas":[3,2,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":8,"replicas":[4,1,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":9,"replicas":[1,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":10,"replicas":[3,2,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":11,"replicas":[2,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":12,"replicas":[3,4,1],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":13,"replicas":[4,1,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":14,"replicas":[1,2,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":15,"replicas":[2,3,4],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":16,"replicas":[1,4,3],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]},{"topic":"wgs-test-event","partition":17,"replicas":[4,3,2],"log_dirs":["/data/kafka","/data/kafka","/data/kafka"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for wgs-test-event-0,wgs-test-event-1,wgs-test-event-2,wgs-test-event-3,wgs-test-event-4,wgs-test-event-5,wgs-test-event-6,wgs-test-event-7,wgs-test-event-8,wgs-test-event-9,wgs-test-event-10,wgs-test-event-11,wgs-test-event-12,wgs-test-event-13,wgs-test-event-14,wgs-test-event-15,wgs-test-event-16,wgs-test-event-17
监控进度
./bin/kafka-reassign-partitions.sh \
--bootstrap-server 192.168.56.104:9092 \
--reassignment-json-file reassign-execute.json \
--verify
Status of partition reassignment:
Reassignment of partition wgs-test-event-0 is completed.
Reassignment of partition wgs-test-event-1 is completed.
Reassignment of partition wgs-test-event-2 is completed.
Reassignment of partition wgs-test-event-3 is completed.
Reassignment of partition wgs-test-event-4 is completed.
Reassignment of partition wgs-test-event-5 is completed.
Reassignment of partition wgs-test-event-6 is completed.
Reassignment of partition wgs-test-event-7 is completed.
Reassignment of partition wgs-test-event-8 is completed.
Reassignment of partition wgs-test-event-9 is completed.
Reassignment of partition wgs-test-event-10 is completed.
Reassignment of partition wgs-test-event-11 is completed.
Reassignment of partition wgs-test-event-12 is completed.
Reassignment of partition wgs-test-event-13 is completed.
Reassignment of partition wgs-test-event-14 is completed.
Reassignment of partition wgs-test-event-15 is completed.
Reassignment of partition wgs-test-event-16 is completed.
Reassignment of partition wgs-test-event-17 is completed.
Clearing broker-level throttles on brokers 1,2,3,4
Clearing topic-level throttles on topic wgs-test-event
验证数据分布
bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe
Topic: wgs-test-event TopicId: 1UvmCx6tTUGN1eMP6XBv6w PartitionCount: 18 ReplicationFactor: 3 Configs: min.insync.replicas=1,segment.bytes=1073741824
Topic: wgs-test-event Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 3 Leader: 3 Replicas: 3,2,1 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 4 Leader: 2 Replicas: 2,1,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 5 Leader: 1 Replicas: 1,3,2 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 6 Leader: 2 Replicas: 2,3,1 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 7 Leader: 3 Replicas: 3,1,2 Isr: 3,2,1 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 8 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 9 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 10 Leader: 1 Replicas: 1,3,2 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 11 Leader: 3 Replicas: 3,2,1 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 12 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 13 Leader: 2 Replicas: 2,3,1 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 14 Leader: 3 Replicas: 3,1,2 Isr: 1,3,2 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 15 Leader: 3 Replicas: 3,1,2 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 16 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: LastKnownElr:
Topic: wgs-test-event Partition: 17 Leader: 2 Replicas: 2,3,1 Isr: 1,2,3 Elr: LastKnownElr:
确认 Broker 4 上已无任何分区副本
./bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe | grep "Replicas:.*4"
# 输出应为空
停止 Broker 4 服务
bin/kafka-server-stop.sh
验证集群稳定
等待几分钟,确保集群元数据同步。
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 3
LeaderEpoch: 12
HighWatermark: 6041
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 347
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: []
新增 Broker controller 节点
查看集群信息
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 15
HighWatermark: 7457
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: []
Broker controller 节点配置
# 核心身份与角色
process.roles=broker,controller
node.id=4
# 控制器仲裁发现地址(指向现有任意活跃控制器)
controller.quorum.bootstrap.servers=192.168.56.104:9093,192.168.56.105:9093,192.168.56.106:9093
# 监听器配置(确保 CONTROLLER 监听器可达)
listeners=PLAINTEXT://192.168.56.107:9092,CONTROLLER://192.168.56.107:9093
controller.listener.names=CONTROLLER
inter.broker.listener.name=PLAINTEXT
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT
# 数据目录
log.dirs=/data/kafka
# 其他配置(必须与集群现有配置保持一致)
# 例如:num.network.threads, num.io.threads, authorizer.class.name, sasl.enabled.mechanisms 等
格式化存储目录
bin/kafka-storage.sh format --cluster-id iTWPNNdzQ0unJAP9_RDwRg --config config/server.properties --no-initial-controllers
Bootstrap metadata: BootstrapMetadata(records=[ApiMessageAndVersion(FeatureLevelRecord(name='metadata.version', featureLevel=29) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='eligible.leader.replicas.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='group.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='share.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='streams.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='transaction.version', featureLevel=2) at version 0)], metadataVersionLevel=29, source=format command)
Formatting metadata directory /data/kafka with metadata.version 4.2-IV1.
启动新节点
bin/kafka-server-start.sh config/server.properties
查看同步状态
新节点启动后,它首先会作为 Observer(观察者) 同步元数据。待其数据追平后,需手动将其提升为 Voter(投票者)。
等待其 LastFetchTimestamp和 LastCaughtUpTimestamp与 Leader 接近,且 LogEndOffset一致。
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --replication
NodeId DirectoryId LogEndOffset Lag LastFetchTimestamp LastCaughtUpTimestamp Status
1 m0cvIiCnSf2SW_L2qbyiGw 9098 0 1780108330523 1780108330523 Leader
2 SKbEh69EScWx2H0x5x5jrw 9098 0 1780108330413 1780108330413 Follower
3 IFcqjkofSX6MvZAJdY1luA 9098 0 1780108330415 1780108330415 Follower
4 7UkW19aCZuWYHBFBm8n65A 9098 0 1780108330413 1780108330413 Observer
查看集群状态
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 15
HighWatermark: 8544
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: [{"id": 4, "directoryId": "7UkW19aCZuWYHBFBm8n65A"}]
提升为 Voter
在新增节点执行命令
bin/kafka-metadata-quorum.sh --command-config config/server.properties --bootstrap-server 192.168.56.104:9092 add-controller
Added controller 4 with directory id 7UkW19aCZuWYHBFBm8n65A and endpoints: CONTROLLER://192.168.56.107:9093
验证仲裁组成员
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 15
HighWatermark: 10157
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}, {"id": 4, "directoryId": "7UkW19aCZuWYHBFBm8n65A", "endpoints": ["CONTROLLER://192.168.56.107:9093"]}]
CurrentObservers: []
更新集群配置
为了更好的可发现性,建议将所有节点的 controller.quorum.bootstrap.servers配置更新,追加新控制器的地址(例如 ...,192.168.56.107:9093)。更新后需滚动重启各节点以使配置生效。
重新分配分区
这部分见 新增 broker 节点 下的 重新分配分区 内容
删除 controller 节点
去掉 id:4 节点 Voter 角色
查看集群配置
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 15
HighWatermark: 10157
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}, {"id": 4, "directoryId": "7UkW19aCZuWYHBFBm8n65A", "endpoints": ["CONTROLLER://192.168.56.107:9093"]}]
CurrentObservers: []
从控制器仲裁组中移除节点 4
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 remove-controller --controller-id 4 --controller-directory-id 7UkW19aCZuWYHBFBm8n65A
Removed KRaft controller 4 with directory id 7UkW19aCZuWYHBFBm8n65A
验证移除结果
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --status
ClusterId: iTWPNNdzQ0unJAP9_RDwRg
LeaderId: 1
LeaderEpoch: 15
HighWatermark: 11613
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 1, "directoryId": "m0cvIiCnSf2SW_L2qbyiGw", "endpoints": ["CONTROLLER://192.168.56.104:9093"]}, {"id": 2, "directoryId": "SKbEh69EScWx2H0x5x5jrw", "endpoints": ["CONTROLLER://192.168.56.105:9093"]}, {"id": 3, "directoryId": "IFcqjkofSX6MvZAJdY1luA", "endpoints": ["CONTROLLER://192.168.56.106:9093"]}]
CurrentObservers: [{"id": 4, "directoryId": "7UkW19aCZuWYHBFBm8n65A"}]
查看控制器状态
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --replication
NodeId DirectoryId LogEndOffset Lag LastFetchTimestamp LastCaughtUpTimestamp Status
1 m0cvIiCnSf2SW_L2qbyiGw 12071 0 1780109822964 1780109822964 Leader
2 SKbEh69EScWx2H0x5x5jrw 12071 0 1780109822478 1780109822478 Follower
3 IFcqjkofSX6MvZAJdY1luA 12071 0 1780109822478 1780109822478 Follower
4 7UkW19aCZuWYHBFBm8n65A 12071 0 1780109822479 1780109822479 Observer
将节点 4 重新配置为纯 Broker 并重启
# 1. 将角色改为纯 Broker
process.roles=broker
# 确保 node.id 保持不变
node.id=4
listeners=PLAINTEXT://192.168.56.107:9092
# 同时更新 advertised.listeners
advertised.listeners=PLAINTEXT://192.168.56.107:9092
# 3. 注释或删除 controller.listener.names 配置
# controller.listener.names=CONTROLLER
# 4. 确保 controller.quorum.bootstrap.servers 配置正确指向剩余的控制器(1,2,3)
# 这是它作为Broker与集群通信所必需的
controller.quorum.bootstrap.servers=192.168.56.104:9093,192.168.56.105:9093,192.168.56.106:9093
重启节点 4 的 Kafka 服务
# 在节点 4 (192.168.56.107) 上执行
./bin/kafka-server-stop.sh
./bin/kafka-server-start.sh config/server.properties
验证控制器状态
bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.56.104:9092 describe --replication
NodeId DirectoryId LogEndOffset Lag LastFetchTimestamp LastCaughtUpTimestamp Status
1 m0cvIiCnSf2SW_L2qbyiGw 12608 0 1780110089914 1780110089914 Leader
2 SKbEh69EScWx2H0x5x5jrw 12608 0 1780110089914 1780110089914 Follower
3 IFcqjkofSX6MvZAJdY1luA 12608 0 1780110089913 1780110089913 Follower
4 7UkW19aCZuWYHBFBm8n65A 12608 0 1780110089914 1780110089914 Observer
验证集群健康
bin/kafka-topics.sh --bootstrap-server 192.168.56.104:9092 --describe --under-replicated-partitions
没有返回结果是正常的。

浙公网安备 33010602011771号