Multiple advertised listeners
当 Pulsar 集群部署在生产环境中时,Broker 可能需要针对不同网络环境暴露多个可访问的地址。 例如,当 Pulsar 集群部署在某个 Kubernetes 中时。如果你需要从其他的 Kubernetes 中访问该 Pulsar 集群,则需要为每个 Broker 分配一个外部客户端可访问的地址。 同时需要确保,同一个 Kubernetes 集群中的客户端,仍需要能够通过内部的网络连接到 Pulsar 集群。
Advertised 监听器
为了确保客户端能够从内部和外部网络连接到 Pulsar 集群。Pulsar 在 Broker 配置文件中提供了advertisedListeners
和internalListenerName
两个配置项。以确保 broker 支持多个 Advertised 监听器,并支持内部和外部网络流量的隔离。
advertisedListeners
: 用来指定多个对外暴露的监听地址。 Broker 在负载管理器和 Bundle 所有者的数据中使用该监听器来作为 broker 的标识符。advertisedListeners
格式如下:<listener_name>:pulsar://<host>:<port>, <listener_name>:pulsar+ssl://<host>:<port>
。 比如可以设置advertisedListeners
为advertisedListeners=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 监听器。
- 在 Broker 配置文件配置多个 Advertised 监听器。
advertisedListeners={listenerName}:pulsar://xxxx:6650,
{listenerName}:pulsar+ssl://xxxx:6651
- 在客户端指定监听器名称。
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://xxxx:6650")
.listenerName("external")
.build();