Multiple advertised listeners

当 Pulsar 集群部署在生产环境中时,Broker 可能需要针对不同网络环境暴露多个可访问的地址。 例如,当 Pulsar 集群部署在某个 Kubernetes 中时。如果你需要从其他的 Kubernetes 中访问该 Pulsar 集群,则需要为每个 Broker 分配一个外部客户端可访问的地址。 同时需要确保,同一个 Kubernetes 集群中的客户端,仍需要能够通过内部的网络连接到 Pulsar 集群。

Advertised 监听器

为了确保客户端能够从内部和外部网络连接到 Pulsar 集群。Pulsar 在 Broker 配置文件中提供了advertisedListenersinternalListenerName 两个配置项。以确保 broker 支持多个 Advertised 监听器,并支持内部和外部网络流量的隔离。

  • advertisedListeners : 用来指定多个对外暴露的监听地址。 Broker 在负载管理器和 Bundle 所有者的数据中使用该监听器来作为 broker 的标识符。 advertisedListeners 格式如下:<listener_name>:pulsar://<host>:<port>, <listener_name>:pulsar+ssl://<host>:<port>。 比如可以设置advertisedListenersadvertisedListeners=internal:pulsar://192.168.1.11:6660,internal:pulsar+ssl://192.168.1.11:6651

  • internalListenerName: 用来指定 Broker 使用的内部服务的URL。 你可以选择advertisedListeners中的其中一个监听器名称来作为internalListenerName的值。 如果internalListenerName没有指定的话,broker 默认使用 Advertised 监听器列表中第一个监听器来作为internalListenerName的值。

设置了advertisedListeners后。只要网络是可用的,客户端就能选择一个监听器作为服务的URl,建立起到 broker 的连接。 然而,如果客户端在一个主题上创建生产者和消费者。那么这个客户端必须先发送一个查询请求到 Broker 上,以获取自己应该访问的 Broker。然后,客户端将连接到自己的 broker 上发布消息或者消费消息。 因此,你必须确保客户端获取到的服务的 URl,是和客户端使用的监听器名称匹配的。 这有助于保证客户端的简单和安全。

使用多个 Advertised 监听器

这个例子展示了 Pulsar 客户端怎样使用多个 Advertised 监听器。

  1. 在 Broker 配置文件配置多个 Advertised 监听器。
  1. advertisedListeners={listenerName}:pulsar://xxxx:6650,
  2. {listenerName}:pulsar+ssl://xxxx:6651
  1. 在客户端指定监听器名称。
  1. PulsarClient client = PulsarClient.builder()
  2. .serviceUrl("pulsar://xxxx:6650")
  3. .listenerName("external")
  4. .build();