[Pulsar] LookUp 原理
当我们需要与 pulsar 中的 topic 进行交互时,如向 topic 生产数据或者从 topic 消费数据,首先我们需要知道 topic 的相关信息。因为 pulsar 中每个 topic 只会由一个 broker 进行服务,所以我们需要通过 lookup 请求找到 topic 所在的 broker,然后让 client 与该 broker 进行后续的连接进行实际的生产和消费操作等。本文介绍 lookup 的原理。
在 Producer 或者 Consumer 要对某个 topic 进行操作前,都会往 Broker 发送一个 lookup 请求。其主要结构如下:
复制代码
在 lookup 请求中,主要携带 topic 的名称以及相关的授权信息等。
Broker 收到 lookup 请求后,首先会通过 topic 名称进行鉴权,判断用户是否有对该 topic 的 lookup 权限。
鉴权通过后将会调用 lookupTopicAsync 方法进行 topic 查询。在完成各类校验操作后,会调用
复制代码
会调用该 topic 所对应的 namespace 的 service,查询该 topic 所在 broker 的 serverUrl,后续会将这个 url 返回给 client,让 client 通过这个 url 与 broker 进行交互。
NamespaceService 中,主要是获取 topic 所在的 bundle 信息,在 bundle 中记录了 topic 和 broker 的对应关系,即可通过 bundle 中记录的信息获取到 serviceUrl。
至此,就完成了 topic 的 lookup 操作。
评论