Topic Discovery, ServiceURL and Cluster

一、Topic Discovery

1. Topic Assignment

首先看一下层次化结构

image-20210613110219438

根据图上所示,topic 的分配是按照 namespace 来划分的

一个 namespace 下面会有很多个 topic,namespace 会把所有的 topic 组成一个环(namespace hash ring)。在 topic 分配之前,会把 topic 的名字 hash 到 namespace hash ring 里。然后根据不同 topic 的 hash 值 又会分为几个小组, 也就是 namespace bundle, bundle 的数量可以在创建 namespace 时就可以指定确认了。

topic 映射 到 bundle 后,接下来就会将 bundle 分配给 broker。 也就是 topic 的分配不在于 topic 本身,而是 bundle 操作。处理过程依靠 load Maneger 进行,对 bundle 进行分配。

load manager 是从 broker 中选出来的一台。 topic 分配到 broker 的过程,全程是由 load manager 来执行的。

image-20210613132008908

2. Topic lookup

topic 如何找到对应的那台 broker呢?

先介绍一个概念:Topic owner ,又可以称为 namespace bundle owner 。

topic 与 broker 的映射关系,存储在 owner 中, owner存储在zookeeper中,任何一个 broker 都可以获取到 topic 到 owner 的映射关系。

lookup 流程:

pulsar 客户端发起 topic lookup 请求给 broker,broker 开启 lookup模式,根据 namespace 去检测出映射的 bundle, 然后将此反馈发给 zookeeper 去查找对应,最后将请求结果返回给客户端。

客户端这时, 会根据请求结果和目标 broker 进行 tcp 长链接。

image-20210613134047938

有个问题,这个时候如果目标 broker 的地址不能直接链接,该怎么办?

解决方案:

使用 pulsar proxy 。它提供了 topic 查询路由功能,可以作为 tcp 反向代理来使用

二、ServiceURL

知道了整个 topic discovery 之后。对 service URL 的使用就会更加准确了

service URL 高可用的几种方式

DNS:在 broker 之前配置一个 DNS,落实到 broker 里。 缺点是 过期时间和缓存限制

Load Balance:可以探测活跃的 broker,可以及时清理 broker。

Multi-Hosts:把所有机器当做一个列表,pulsar客户端进行负载均衡,第一次用第一个broker,链接失败用第二个,以此类推

三、Clusters

部署 pulsar 集群的时候,需要制定 cluster name, 集群配置信息作为元数据保存到 zookeeper 上。

在 cluster 配置文件里,主要是四个接入端口,分为两大类。

HTTP service:即提供 admin 操作的接口

  • Web service URL (http://)
  • Web service URL TLS (https://)

Broker service:即客户端、producer、consumer 等需要连接的 6650 端口。

  • Broker service URL (pulsar://)
  • Broker service URL TLS (pulsar+ssl://)

这几个参数只有在进行跨机房复制时才使用。

Author: iMine
Link: https://imine141.github.io/2021/06/12/pulsar/Topic%20Discovery,%20ServiceURL%20and%20Cluster/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.