目前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: BuB	PartitionCount:4	ReplicationFactor:4	         Configs:
	 Topic: BuB	Partition: 0	        Leader: 1001	 Replicas: 1001	Isr: 1001
	 Topic: BuB	Partition: 1	        Leader: 1001     Replicas: 1001	Isr: 1001
	 Topic: BuB	Partition: 2	        Leader: 1001     Replicas: 1001	Isr: 1001
	 Topic: BuB	Partition: 3	        Leader: 1001	 Replicas: 1001	Isr: 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 BuB
Topic:BuB	PartitionCount:4	ReplicationFactor:4	Configs:
Topic: BuB	Partition: 0	Leader: 1001	Replicas: 1001,1002,1003,1004	Isr: 1001,1004,1002,1003
Topic: BuB	Partition: 1	Leader: 1002	Replicas: 1002,1003,1004,1001	Isr: 1002,1001,1004,1003
Topic: BuB	Partition: 2	Leader: 1003	Replicas: 1003,1004,1001,1002	Isr: 1003,1004,1002,1001
Topic: BuB	Partition: 3	Leader: 1004	Replicas: 1004,1001,1002,1003	Isr: 1004,1002,1001,1003

参考链接:


总结: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个分区。

kamailio设置负载均衡方式 kafka集群负载均衡_负载均衡