当前环境
docker环境下搭建了kafka3节点伪集群
主题创建
- 创建分区数为3、副本因子为3的主题
- 使用脚本:kafka-topics.sh
// 创建主题
./kafka-topics.sh --create --bootstrap-server kafka1:9092 --replication-factor 3 --partitions 3 --topic partitions-test
主题查看
从查看的结果看,3个分区(背后是具体的分区leade副本)分布在3个kafka节点上,leader副本所在的节点也便是标识分区所在节点(好绕人),可见分区分布均匀
//查看主题分区分布
./kafka-topics.sh --describe --bootstrap-server kafka1:9092 --topic partitions-test
分区再平衡
某个节点下线后,其上的某个分区的leader副本下线,该分区再其他节点上的副本升级为leader副本对外提供读写服务,这样造成,存在单个节点上有多个分区leader情况,导致节点负载增加。故障恢复,节点上线,分区在该节点上的leader副本转为follower副本,分区leader副本分布情况未有改善!
节点下线
//查看主题分区分布
./kafka-topics.sh --describe --bootstrap-server kafka1:9092 --topic partitions-test
节点上线
//查看主题分区分布
./kafka-topics.sh --describe --bootstrap-server kafka1:9092 --topic partitions-test
分区平衡
Kafka 的分区自动平衡的功能,对应的 broker 端参数是auto.leader.rebalance.enable,默认值为true,则 Kafka 的控制器会启动一个定时任务,这个定时任务会轮询所有的 broker节点,计算每个broker节点的分区不平衡率(broker中的不平衡率=非优先副本的leader个数/分区总数)是否超过leader.imbalance.per.broker.percentage参数配置的比值,默认值为 10%,如果超过设定的比值则会自动执行优先副本的选举动作以求分区平衡。执行周期由leader.imbalance.check.interval.seconds控制,默认值为300秒,即5分钟
//查看主题分区分布
./kafka-topics.sh --describe --bootstrap-server kafka1:9092 --topic partitions-test