带你认识pulsar负载均衡利器Bundle

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 带你认识pulsar负载均衡利器Bundle

Pulsar是一款非常优秀的消息流平台,这篇文章主要讲Pulsar中Topic通过Bundle这个负载均衡利器在Broker中的分配。

1 Topic层级概念

首先看一下Pulsar的架构图,如下图:

微信图片_20221212210544.jpgPulsar的Broker可以管理一个或者多个Topic。Pulsar是一个多租户平台,多租户的特性体现在Topic是一个层级概念,Topic的URL如下图:

微信图片_20221212210622.png

一个Topic可以使用persistent属性指定是否持久化,而Topic的上层使用租户来进行权限隔离,使用Namespace来进行策略管理。

Topic的层级概念也可以用下图来表示:

微信图片_20221212210649.jpg

在一个公司内部的Pulsar集群中,可以根据业务部门建租户,根据业务部门内部的不同项目组来划分Namespace,根据每个项目组的不同业务单元来划分Topic。

2 Namespace Bundles

Pulsar把Namespace拆成了Bundle,Bundle是namespace的子集。如下图一个Namespace下面有6个Topic:

微信图片_20221212210709.png

我们把这个Namespace划分成四个hash区域,从0x00000000~0xffffffff,之后把6个Topic按照名字(上面URL图中的最后一部分)做Hash运算,分配到这四个区域内,如下图:

微信图片_20221212210731.png

上图中,Topic0做Hash运算后值落在了0xc0000000~0xffffffff这个区域,其他几个Topic也分别落到了自己的Hash区域。

为什么要为Namespace划分Bundle子集呢?因为Pulsar有自动负载均衡机制,会把繁忙的Broker里面的一些Topic迁移到比较空闲的Broker中,实现Broker直接的流量均衡。这个搬移如果直接搬移Namespace,会太重,比如上面的图需要一下子搬移6个Topic。如果以Topic为单位,每次搬移数据就会太小,而且搬移过程中需要保存大量Topic和Broker之间的元数据。有了Bundle后,以Bundle为单位进行迁移,迁移Topic会容易很多,比如上图中,一次迁移一个Bundle,有的包含一个Topic,有的包含两个Topic。

3 Broker分配Bundle

Broker集群启动过程中会在Zookeeper竞争创建临时节点,创建成功的成为Leader节点,叫Load Manager,这个节点会定期搜集其他Broker的服务状态,比如CPU、内存、网卡带宽利用率,这些指标都是临时数据,所以Leader节点并不会保存太多数据。

Leader节点会根据搜集到的负载情况为其他Broker节点分配Bundle。如下图:

微信图片_20221212210754.png


上图中Broker1竞争成为Leader,它负责为其他几个Broker分配Bundle。初始化时,每个Broker都没有Boundle,Leader把topic0分配给了Broker3,这就代表topic0所在的Bundle分配给了Broker3,之后Hash值跟topic0相同的都会落到这个Bundle。然后把topic1分配给了Broker2,这就代表topic1所在的Bundle分配给了Broker2。类似把其他2个Bundle分别分配给了Broker0和Broker1。

4 高可用

还是以上面的图为例,如果Broker0宕机了,Load Manager和ZK都能检测到broker0宕机,这时Load Manager会重新把Bundle(0x00000000~0x400000000)分配给其他三个broker,最后选择哪个broker取决于Load Manager收集到的每个broker的负载情况,会找一个负载最小的broker分配。如下图:

微信图片_20221212210816.png

如果Broker1宕机了,也就是Leader节点宕机了,那Broker0、Broker2和Broker3三个节点会去Zookeeper抢占注册临时节点,注册成功的成为新的Leader,新的Leader节点会把Broker1的Bundle分配给剩下的3个Broker。

5 客户端

Topic通过Bundle绑定了Broker之后,客户端就可以跟自己要访问的Broker建立长链接,如下图:

微信图片_20221212210837.png

这里需要注意:图中的第1、2两步既可以用HTTP的方式,也可以用TCP的方式,但是第3步也就是Broker跟client建立连接只能用TCP。

Pulsar为客户端提供了代理,客户端可以直接跟代理通信,如下图:

微信图片_20221212210859.png

6 总结

使用了Bundle,Pulsar可以方便地通过Load Manager节点做负载均衡,不用考虑一次搬移的Topic太多,也不用担心一次搬移一个Topic而需要保存太多元数据。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4天前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
3月前
|
存储 运维 监控
Kubernetes 集群的监控与性能优化策略
【5月更文挑战第19天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes已成为部署、管理和扩展服务的关键平台。然而,随着集群规模的增长和服务的复杂化,有效的监控和性能优化成为确保系统稳定性和高效性的重要挑战。本文将探讨针对Kubernetes集群监控的最佳实践,并提出一系列性能优化策略,旨在帮助运维人员识别潜在的瓶颈,保障服务的持续可靠性及响应速度。
|
3月前
|
消息中间件 监控 Java
在RocketMQ中,Proxy的gRPC参数调优是一项重要的性能优化工作
在RocketMQ中,Proxy的gRPC参数调优是一项重要的性能优化工作【1月更文挑战第10天】【1月更文挑战第46篇】
67 2
|
3月前
|
Kubernetes 网络协议 Linux
Cilium 系列 -13- 启用 XDP 加速及 Cilium 性能调优总结
Cilium 系列 -13- 启用 XDP 加速及 Cilium 性能调优总结
|
消息中间件 存储 缓存
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署) 1
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署)
472 0
|
存储 消息中间件 Kubernetes
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署) 2
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署)
1057 0
|
存储 缓存 监控
分布式监控CAT服务端的本地部署
CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统。美团点评基础架构部希望在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、统一的解决方案,CAT 目前在美团点评的产品定位是应用层的统一监控组件,在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等服务。
557 0
分布式监控CAT服务端的本地部署
|
存储 缓存 编解码
白话Elasticsearch68-ES生产集群部署重要的操作系统设置
白话Elasticsearch68-ES生产集群部署重要的操作系统设置
330 0
|
Java
白话Elasticsearch71-ES生产集群部署之各个节点以daemon模式运行以及优雅关闭
白话Elasticsearch71-ES生产集群部署之各个节点以daemon模式运行以及优雅关闭
97 0
|
存储 Prometheus Kubernetes
对比开源丨Prometheus 服务多场景存储压测全解析
作为国内领先的云服务提供商,阿里云提供了优秀的可观测全套解决方案,阿里云 Prometheus 服务正是其中重要一环,相比于开源版本 Prometheus,阿里云的 Prometheus 服务无论是易用性、扩展性、性能均有大幅度提升。
对比开源丨Prometheus 服务多场景存储压测全解析