Multiple advertised listeners
当在生产环境中部署 Pulsar 集群时,broker 可能需要针对不同网络环境提供多个可访问的地址。 例如,当 Pulsar 集群部署在某个 Kubernetes 中时,如果从其他的 Kubernetes 中访问该 Pulsar 集群,则需要为每个外部客户端分配一个可访问的 broker URL。 同时需要确保,同一个 Kubernetes 集群中的客户端,仍需要能够通过内部的网络连接到 Pulsar 集群。
Advertised 监听器
为确保客户端能够从内部或外部网络连接到 Pulsar 集群,Pulsar 在 broker 配置文件中引入了两个配置项:advertisedListeners
和 internalListenerName
,保证 broker 支持多个 Advertised 监听器,也实现了内部和外部网络流量之间的隔离。
advertisedListeners
:用于指定多个 Advertised 监听器。 在负载管理器和 bundle owner 数据中,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。 但如果客户端在同一个 topic 上创建 producer 和 consumer,则客户端必须先发送查询请求到 broker,获取 owner broker,再连接到此 owner 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();