Kafka集群Broker没起到负载均衡作用

来源:互联网 发布:windows安装工具 编辑:程序博客网 时间:2024/06/05 23:59

目前Kafka集群部署了4个Broker节点,但在压测的过程中,推送消息到Kafka没有起到负载均衡,都只推送到一台Broker节点,

1、查看推送程序物理机连接kafka端口6667的TCP连接,确实只有一台

     [root@~]#  ss -anp |grep ':6667' |grep '11314'     (Linux查看方式)     tcp    ESTAB      0      0      ::ffff:172.16.10.133:43760      ::ffff:172.16.10.166:6667         users:(("java",pid=11314,fd=551))     C:\Users\jun>netstat -n |findstr ":6667"           (Windows查看方式)     TCP    172.16.80.126:59795    172.16.10.166:6667     ESTABLISHED


2、查看topic分配的分区和Broker选择Leader也都只有一台borker=1001

      [root@node-08 ~]# /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --describe --zookeeper 172.16.10.158:2181 --topic BuB         Topic: BuBPartitionCount:4ReplicationFactor:4         Configs: Topic: BuBPartition: 0        Leader: 1001 Replicas: 1001Isr: 1001 Topic: BuBPartition: 1        Leader: 1001     Replicas: 1001Isr: 1001 Topic: BuBPartition: 2        Leader: 1001     Replicas: 1001Isr: 1001 Topic: BuBPartition: 3        Leader: 1001 Replicas: 1001Isr: 1001

3、如何让Kafka集群启到多个Broker节点负载均衡的作用呢?

在 Kafka 集群中,我们可以对每个 Topic 进行一个或是多个分区,并为该 Topic 指定备份数,指定备份数的时候,备份数要小于等于 Brokers 数。否则创建失败。

其中为什么备份数要小于等于Broker数,探究其中奥秘,修改备份参数:default.replication.factor=1个修改成了4个备份,Leader的选举变成了4台,

在刷新物理机推送消息与物理机的TCP连接,现在变成了4台:

[root@~]# ss -anp |grep ':6667' |grep 'pid=11314'tcp    ESTAB      0      0      ::ffff:172.16.10.133:43760              ::ffff:172.16.10.166:6667                users:(("java",pid=11314,fd=551))tcp    ESTAB      0      0      ::ffff:172.16.10.133:52254              ::ffff:172.16.10.168:6667                users:(("java",pid=11314,fd=549))tcp    ESTAB      0      0      ::ffff:172.16.10.133:51814              ::ffff:172.16.10.167:6667                users:(("java",pid=11314,fd=548))tcp    ESTAB      0      0      ::ffff:172.16.10.133:54038              ::ffff:172.16.10.169:6667                users:(("java",pid=11314,fd=550))

4、查看topic分配的4个分区也对应到4个Broker节点

     

[root@~]# /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --describe --zookeeper 172.16.10.158:2181 --topic BuBTopic:BuBPartitionCount:4ReplicationFactor:4Configs:Topic: BuBPartition: 0Leader: 1001Replicas: 1001,1002,1003,1004Isr: 1001,1004,1002,1003Topic: BuBPartition: 1Leader: 1002Replicas: 1002,1003,1004,1001Isr: 1002,1001,1004,1003Topic: BuBPartition: 2Leader: 1003Replicas: 1003,1004,1001,1002Isr: 1003,1004,1002,1001Topic: BuBPartition: 3Leader: 1004Replicas: 1004,1001,1002,1003Isr: 1004,1002,1001,1003

参考链接:http://www.cnblogs.com/smartloli/p/6012134.html

http://www.cnblogs.com/bonelee/p/6893286.html

总结:Kafka集群Broker要起到负载均衡作用的效果,default.replication.factor 备份数必须>=2,若是很均衡所有Broker节点,那就备份数=Broker节点数 ,否则就能均衡数=备份数


手动敲命令新建topic是可以负载均衡,推测跟kafka集群配置使用不当有关系

 ./kafka-topics.sh  --create --zookeeper 192.168.128.102:2181 --replication-factor 1  --partitions 2 --topic topic1 


最终排查,其实备份数只是备份多份数据用,是不会起到负载作用的,之所以会出现不负载这种场景,是因为在增加Borker节点的时候,加大分区数重启Kafka服务,topic已分配好的分区数没变更,所以直接通过Zookeeper命令删除所有topic是不可取的(rmr /broker),因为用命令直接删除zookeeper数据会删除不干净影响到kafka的leader负载均衡的选举,之后通过kafka的delete命令删除解决负载均衡的问题。


 ./kafka-topics.sh --delete --zookeeper 172.16.10.157:2181 --topic BuB # 删除分区 ./kafka-preferred-replica-election.sh --zookeeper 172.16.10.157:2181 # 重新分区


注意:如果是多个kafka的broker节点,要关闭其中几个broker节点,通过kafka delete删除还是无效,会提示删除已被标志了,要快速删除,还是得到zookeeper上面进行直接删除。

======================================================================================================================


之后发现一个问题:kafka重新启动后,主题的分区分布又重新分配,有的节点只有分配3个分区,有的节点分配5个分区。