3.5. 配置网络地址
虚拟集群配置需要一个网络地址配置供应商,以管理网络通信并为客户端提供代理地址信息。
Apache Kafka 代理的流有以下内置供应商:
-
代理地址供应商(
PortPerBrokerClusterNetworkAddressConfigProvider) -
节点 ID 范围供应商(
RangeAwarePortPerNodeClusterNetworkAddressConfigProvider) -
SNI 路由地址供应商(
SniRoutingClusterNetworkAddressConfigProvider)
确保 Virtual cluster bootstrap 地址和生成的代理地址可以被 Kafka 客户端解析并可路由。
3.5.1. 代理地址供应商 复制链接链接已复制到粘贴板!
per-broker 网络地址配置供应商为虚拟集群的 bootstrap 地址打开一个端口,以及目标 Kafka 集群中每个代理的一个端口。开放端口的数量是动态维护的。例如,如果从集群中删除代理,则分配给它的端口将关闭。如果您有两个虚拟集群,每个都以一个带有三个代理的 Kafka 集群为目标,则 8 个端口将总绑定。
此供应商最适合直接的配置。理想情况下,目标集群应具有连续、稳定的代理 ID 和已知的最小代理 ID,如 0、1、2,具有三个代理的集群。虽然它可以处理非后续代理 ID,但这需要公开与 maxBrokerId - minBrokerId 相等的端口,但如果您的集群包含代理 ID,如 0 和 20000,这可能会过长。
供应商支持明文和 TLS 下游连接。
代理地址配置示例
每个代理的 ID 必须大于或等于 lowestTargetBrokerId,且小于 lowestTargetBrokerId + numberOfBrokerPorts。将节点 ID 映射到端口的当前策略如下: nodeId 。示例配置将代理 ID 1000、1001 和 1002 分别映射到端口 9193、9194 和 9195。重新配置 numberOfBrokerPorts 以容纳集群中的代理数量。
代理地址配置示例会创建以下代理地址:
mybroker-0.mycluster.kafka.com:9193 mybroker-1.mycluster.kafka.com:9194 mybroker-2.mycluster.kafka.com:9194
mybroker-0.mycluster.kafka.com:9193
mybroker-1.mycluster.kafka.com:9194
mybroker-2.mycluster.kafka.com:9194
brokerAddressPattern 配置参数接受 $(nodeId) 替换令牌,该令牌是可选的。如果包含,则 $(nodeId) 被目标集群的 node.id (或 broker.id)替代。
例如,如果集群有三个代理,您的 Kafka 客户端会接收代理地址,如下所示:
0. mybroker-0.mycluster.kafka.com:9193 1. mybroker-1.mycluster.kafka.com:9194 2. mybroker-2.mycluster.kafka.com:9195
0. mybroker-0.mycluster.kafka.com:9193
1. mybroker-1.mycluster.kafka.com:9194
2. mybroker-2.mycluster.kafka.com:9195
3.5.2. 节点 ID 范围供应商 复制链接链接已复制到粘贴板!
作为代理地址供应商的替代方法,节点 ID 范围供应商允许您为目标集群中的特定节点 ID 建模,实现有效的端口分配,即使代理 ID 没有排序或广泛空间,可以确保节点 ID 映射到端口,同时最小化所需的端口数量。
节点 ID 范围配置示例
节点 ID 范围必须不同,这意味着节点 ID 无法属于多个范围。
提供给集群节点的 KRaft 角色可以在配置中容纳。例如,使用一个带有以下节点 ID 和角色的 KRaft 的目标集群:
- nodeid: 0, roles: controller
- nodeid: 1, roles: controller
- nodeid: 2, roles: controller
- nodeid: 1000, roles: broker
- nodeid: 1001, roles: broker
- nodeid: 1002, roles: broker
- nodeid: 99999,角色: broker
这可以作为三个节点 ID 范围建模,如下例所示。
使用 KRaft 角色的节点 ID 范围配置示例
此配置会导致从节点 ID 到端口的以下映射:
-
nodeid: 0
port 9193 -
nodeid: 1
port 9194 -
nodeid: 2
port 9195 -
nodeid: 1000
port 9196 -
nodeid: 1001
port 9197 -
nodeid: 1002
port 9198 -
nodeid: 99999
port 9199
3.5.3. SNI 路由地址供应商 复制链接链接已复制到粘贴板!
SNI (Server Name Indication)路由供应商会打开所有虚拟集群或每个端口的一个端口。您可以为整个集群或每个代理打开一个端口。SNI 路由提供程序使用 SNI 信息来确定路由流量的位置,因此需要下游 TLS。
SNI 路由地址供应商配置示例
- 1
- 所有流量的单一地址,包括 bootstrap 地址和代理。
在 SNI 路由地址配置中,brokerAddressPattern 规格是必需的,因为需要为每个代理生成路由。
使用公共云的负载均衡器时,单个端口操作可能会具有成本优势,因为它允许在所有虚拟集群中共享单个云供应商负载均衡器。