
解决方案:修改分区数
kafka-topics.sh --zookeeper <zookeeper_address> --alter --topic topic_name --partitions 3
一旦修改了 Topic 的分区数,Kafka 会触发分区的重新分配过程
解决方案:修改副本数
kafka-topics.sh --zookeeper <zookeeper_address> --alter --topic topic_name --replication-factor 3
一旦修改了 Topic 的分区数,Kafka 会触发副本的重新分配过程
kafka-console-consumer
和kafka-console-producer
,通过消费源 Topic 的数据,然后将其生产到目标 Topic 中。这种方法适用于数据量较小的情况。你可以使用以下命令启动 MirrorMaker 进行数据复制:
kafka-run-class.sh kafka.tools.MirrorMaker --consumer.config <source_consumer_properties> --producer.config <target_producer_properties> --whitelist <source_topic> --num.streams <num_streams>
其中,<source_consumer_properties>
是源 Kafka 集群的消费者配置文件,<target_producer_properties>
是目标 Kafka 集群的生产者配置文件,<source_topic>
是要迁移的源 Topic 名称,<num_streams>
是并行处理数据的流的数量。
# 执行分区计划 kafka-reassign-partitions.sh --zookeeper <zookeeper_address> --reassignment-json-file reassignment.json --execute # 验证分区计划进度 kafka-reassign-partitions.sh --zookeeper <zookeeper_address> --reassignment-json-file reassignment.json --verify
reassignment.json
{ "version":1, "partitions":[ {"topic":"my_topic","partition":0,"replicas":[1,2,3]}, {"topic":"my_topic","partition":1,"replicas":[2,3,4]}, ... ] }
默认情况下:添加或删除 Broker,修改 Topic 的分区数或副本数会自动触发分区重分配,由controller监测/控制
解决方案:尝试重新启动宕机的 broker。在启动之前,确保检查并修复可能导致宕机的问题,如磁盘空间不足、内存问题等。监控集群状态:监控集群状态,确保宕机的 broker 已经重新加入集群,并且集群的健康状态恢复正常。
原因分析:
tail -100 ~/kafka/logs/server.log kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker_host>:<broker_port> kafka-consumer-groups.sh --describe --group <consumer_group> --bootstrap-server <broker_host>:<broker_port>