驾驭千级节点——揭秘PUMA大规模集群能力(三) ---- 弹性伸缩

网友投稿 652 2022-05-29

1.1保证负载均衡的扩容

当前原生Kafka已经支持简单的扩容节点能力,但是有一个很严重问题,就是如果有新扩容节点加入集群,新创建的topic不会自动分配到新加入的空闲节点上,它还是以轮训的方式分配topic对应的partition到所有的节点上,这样会导致新加入的节点上的topic和partition数都偏少,导致负载失衡,进而影响集群稳定性。所以这里我们需要做的就是是:新创建的topic分区优先分配在新扩容节点上。

具体的技术细节这里就不赘述了,主要就是在创建topic时,改变其分区尤其是leader分区的创建和分配策略,然后提供新的创建topic接口和脚本命令,实现topic和partition优先分配到新加入的空闲节点上,最终实现partition和leader在所有集群节点上的均衡,有效防止集群因资源使用不均匀而出现异常。

1.2基于分区的细粒度缩容

业界目前没有缩容分区的能力,PUMA通过新增后台处理线程、添加分区数据老化及迁移流程来实现业务无感知的分区缩容能力,实现细节这里不多说,给一个整体的流程图吧

上图,在Controller内部的PartitionStateMachine状态机中增加对删除分区事件的监控,具体在zk上新增删除分区的的目录,然后对每个Topic创建删除分区事件的Listener(DelPartitionListener)。增加一个删除分区命令用于生成具体的删除分区目录,当进行删除分区时,DelPartitionListener可以在这个目录上感知有哪些分区要删除,更新controller的元数据,后台的PartitionDeleteThread就会定时检查并删除这些分区。

驾驭千级节点——揭秘PUMA大规模集群能力(三) ---- 弹性伸缩

1.3弹性伸缩价值点

PUMA提供动态对节点、分区、集群等扩容/缩容能力,主要的价值在于:

1. 应对业务负载峰值, 因为每个节点提供的能力一定峰值限制(磁盘、网卡、Topic总数等),通过增加节点提升整体集群的能力。例如云消息服务,扩展节点才能提升增加更多的租户,满足业务需求。

2. 增加特定业务负载能力,  因为只增加节点并不会有分区分配到上面,通过增加分区或者迁移分区到新节点可以提升特定业务的负载能力。例如云消息服务,某个租户需要提升处理能力(从5千提升到10w)以应对业务峰值(例如vmall抢购)

3. 增加云容量,接纳更多用户。例如云消息服务,一个集群所能承受的租户和Topic数是有限制的,当租户超过一定值时,单一集群性能会下降。通过扩展集群,可以接纳更多租户。

4. 减少资源的浪费,提升资源利用率。例如缩容在峰值抢购结束后,可以尽快减少资源提高资源利用率。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云端大事件】腊八节,华为云市场为您精心烹制了这碗粥
下一篇:基于鲲鹏服务器zabbix5.0-01-分布式监控部署,添加代理
相关文章