驾驭千级节点——揭秘PUMA大规模集群能力(三) ---- 弹性伸缩
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就会定时检查并删除这些分区。
1.3弹性伸缩价值点
PUMA提供动态对节点、分区、集群等扩容/缩容能力,主要的价值在于:
1. 应对业务负载峰值, 因为每个节点提供的能力一定峰值限制(磁盘、网卡、Topic总数等),通过增加节点提升整体集群的能力。例如云消息服务,扩展节点才能提升增加更多的租户,满足业务需求。
2. 增加特定业务负载能力, 因为只增加节点并不会有分区分配到上面,通过增加分区或者迁移分区到新节点可以提升特定业务的负载能力。例如云消息服务,某个租户需要提升处理能力(从5千提升到10w)以应对业务峰值(例如vmall抢购)
3. 增加云容量,接纳更多用户。例如云消息服务,一个集群所能承受的租户和Topic数是有限制的,当租户超过一定值时,单一集群性能会下降。通过扩展集群,可以接纳更多租户。
4. 减少资源的浪费,提升资源利用率。例如缩容在峰值抢购结束后,可以尽快减少资源提高资源利用率。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:hwclouds.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
- 点赞
- 收藏
- 关注作者
评论(0)