ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kafka 负载均衡策略

2021-11-03 12:00:47  阅读:217  来源: 互联网

标签:P2 负载 P1 分区 Kafka 均衡 partitions


一、生产者负载均衡

1、分区器

使用分区器,kafka生产消息时,根据分区器将消息投递到指定的分区中。

Kafka默认的分区器时DefaultPartitioner。它的分区策略是根据key进行分配的。

如果key不为null: 对key值进行Hash计算,算出一个分区号; 拥有相同Key值被写入同一个分区;

如果key为null: 消息将以轮询方式,在所有可用分区中分别写入消息。

 

如果不想使用Kafka默认分区器,可以实现Partitioner接口,自己实现分区方法。

 

并非分区数量越多,效率越高:
Topic 每个 partition 在 Kafka 路径下都有一个自己的目录,该目录下有两个主要的文件:base_offset.log 和 base_offset.index。Kafka 服务端的 ReplicaManager 会为每个 Broker 节点保存每个分区的这两个文件的文件句柄。所以如果分区过多,ReplicaManager 需要保持打开状态的文件句柄数也就会很多。

每个 Producer, Consumer 进程都会为分区缓存消息,如果分区过多,缓存的消息越多,占用的内存就越大;

n 个分区有 1 个 Leader,(n-1) 个 Follower,如果运行过程中 Leader 挂了,则会从剩余 (n-1) 个 Followers 中选举新 Leader;如果有成千上万个分区,那么需要很长时间的选举,消耗较大的性能。

参考: https://blog.csdn.net/u010711495/article/details/113678248

 

 

二、消费者负载均衡

1、再均衡

再均衡是消费者层面的负载均衡

 当一个group中,有consumer加入或者离开是,会触发partitions均衡,从而提升topic的并发消费能力。

如下图所示,分区partitions有: P0, P1,P2,P3

加入group的消费者consumer有: C0, C1

流程如下:

1、 根据partitions索引号对partitions进行排序,P0, P1,P2,P3

2、根据consumer id排序,C0,C1

3、计算倍数 M = [P0, P1,P2,P3].size / [ C0, C1].size = 4 / 2 = 2;

4、然后依次分配Ci = [P(i * M),P((i + 1) * M -1)], 当i=0时, C0=[P0,P1]; 当i=1时, C1=[P2,P3]

 

标签:P2,负载,P1,分区,Kafka,均衡,partitions
来源: https://www.cnblogs.com/linlf03/p/15502869.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有