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
没有返回结果是正常的。
posted @ 2026-05-30 11:06  小吉猫  阅读(6)  评论(0)    收藏  举报