欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:961
  2. 浏览总数:11,490,334
  3. 评论:3873
  4. 分类目录:103 个
  5. 注册用户数:5846
  6. 最后更新:2018年10月17日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Kafka集群Leader均衡(Balancing leadership)

  当一个broker停止或者crashes时,所有本来将它作为leader的分区将会把leader转移到其它broker上去。这意味着当这个broker重启时,它将不再担任何分区的leader,kafka的client也不会从这个broker来读取消息,从而导致资源的浪费。比如下面的broker 7是挂掉重启的,我们可以发现Partition 1虽然在broker 7上有数据,但是由于它挂了,所以Kafka重新将broker 3当作该分区的Leader,然而broker 3已经是Partition 6的Leader了。

[iteblog@www.iteblog.com ~]$ kafka-topics.sh --topic iteblog   \
--describe --zookeeper www.iteblog.com:2181

Topic:iteblog PartitionCount:7  ReplicationFactor:2 Configs:
  Topic: iteblog  Partition: 0  Leader: 1 Replicas: 1,4 Isr: 1,4
  Topic: iteblog  Partition: 1  Leader: 3 Replicas: 7,3 Isr: 3,7
  Topic: iteblog  Partition: 2  Leader: 5 Replicas: 5,7 Isr: 5,7
  Topic: iteblog  Partition: 3  Leader: 6 Replicas: 6,1 Isr: 1,6
  Topic: iteblog  Partition: 4  Leader: 4 Replicas: 4,2 Isr: 4,2
  Topic: iteblog  Partition: 5  Leader: 2 Replicas: 2,5 Isr: 5,2
  Topic: iteblog  Partition: 6  Leader: 3 Replicas: 3,6 Isr: 3,6

  幸运的是,Kafka中有一个被称为优先副本(preferred replicas)的概念。如果一个分区有3个副本,且这3个副本的优先级别分别为1,5,9,根据优先副本的概念,1会作为leader。为了使kafka集群恢复默认的leader,需要运行以下命令:

[iteblog@www.iteblog.com ~]$ kafka-preferred-replica-election.sh   \
--zookeeper www.iteblog.com:2181

Successfully started preferred replica election for partitions Set([iteblog,1],
 [iteblog,5], [iteblog,4], [iteblog,6], [iteblog,2], [iteblog,0], [iteblog,3])

  每次运行上面的命令是比较烦躁的,不过Kafka为我们提供了一个参数,可以使得Kafka集群自动平衡Leader,我们只需要在server.properties文件中配置如下设置:

auto.leader.rebalance.enable=true

这个值默认就是打开的。下面是Leader平衡的结果:

[iteblog@www.iteblog.com ~]$ kafka-topics.sh --topic iteblog --describe \
--zookeeper www.iteblog.com:2181

Topic:iteblog PartitionCount:7  ReplicationFactor:2 Configs:
  Topic: iteblog  Partition: 0  Leader: 1 Replicas: 1,4 Isr: 1,4
  Topic: iteblog  Partition: 1  Leader: 7 Replicas: 7,3 Isr: 3,7
  Topic: iteblog  Partition: 2  Leader: 5 Replicas: 5,7 Isr: 5,7
  Topic: iteblog  Partition: 3  Leader: 6 Replicas: 6,1 Isr: 1,6
  Topic: iteblog  Partition: 4  Leader: 4 Replicas: 4,2 Isr: 4,2
  Topic: iteblog  Partition: 5  Leader: 2 Replicas: 2,5 Isr: 5,2
  Topic: iteblog  Partition: 6  Leader: 3 Replicas: 3,6 Isr: 3,6

可以看出broker 7重新变成Partition 1的Leader了。

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Kafka集群Leader均衡(Balancing leadership)】(https://www.iteblog.com/archives/1612.html)
喜欢 (4)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!