写点什么

[Pulsar] LookUp 原理

作者:Zike Yang
  • 2021 年 12 月 19 日
  • 本文字数:700 字

    阅读完需:约 2 分钟

当我们需要与 pulsar 中的 topic 进行交互时,如向 topic 生产数据或者从 topic 消费数据,首先我们需要知道 topic 的相关信息。因为 pulsar 中每个 topic 只会由一个 broker 进行服务,所以我们需要通过 lookup 请求找到 topic 所在的 broker,然后让 client 与该 broker 进行后续的连接进行实际的生产和消费操作等。本文介绍 lookup 的原理。


在 Producer 或者 Consumer 要对某个 topic 进行操作前,都会往 Broker 发送一个 lookup 请求。其主要结构如下:

message CommandLookupTopic {    required string topic            = 1;    required uint64 request_id       = 2;    optional bool authoritative      = 3 [default = false];}
复制代码

在 lookup 请求中,主要携带 topic 的名称以及相关的授权信息等。


Broker 收到 lookup 请求后,首先会通过 topic 名称进行鉴权,判断用户是否有对该 topic 的 lookup 权限。

鉴权通过后将会调用 lookupTopicAsync 方法进行 topic 查询。在完成各类校验操作后,会调用

LookupOptions options = LookupOptions.builder()  .authoritative(authoritative)  .advertisedListenerName(advertisedListenerName)  .loadTopicsInBundle(true)  .build();pulsarService.getNamespaceService().getBrokerServiceUrlAsync(topicName, options)  .thenAccept(lookupResult -> {    ...    });
复制代码

会调用该 topic 所对应的 namespace 的 service,查询该 topic 所在 broker 的 serverUrl,后续会将这个 url 返回给 client,让 client 通过这个 url 与 broker 进行交互。


NamespaceService 中,主要是获取 topic 所在的 bundle 信息,在 bundle 中记录了 topic 和 broker 的对应关系,即可通过 bundle 中记录的信息获取到 serviceUrl。


至此,就完成了 topic 的 lookup 操作。

用户头像

Zike Yang

关注

还未添加个人签名 2020.10.20 加入

Apache Pulsar Contributor

评论

发布
暂无评论
[Pulsar] LookUp原理