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,如 020000,这可能会过长。

供应商支持明文和 TLS 下游连接。

代理地址配置示例

clusterNetworkAddressConfigProvider:
  type: PortPerBrokerClusterNetworkAddressConfigProvider
  config:
    bootstrapAddress: mycluster.kafka.com:9192 
1

    brokerAddressPattern: mybroker-$(nodeId).mycluster.kafka.com 
2

    brokerStartPort: 9193 
3

    numberOfBrokerPorts: 3 
4

    lowestTargetBrokerId: 1000 
5

    bindAddress: 192.168.0.1 
6
Copy to Clipboard Toggle word wrap

1
Kafka 客户端使用的 bootstrap 地址的主机名和端口。
2
(可选)用于组成代理地址的代理地址模式。如果没有定义,则默认为 bootstrap 地址的主机名部分以及分配给代理的端口号。
3
(可选)代理端口范围的起始号。默认为 bootstrap 地址的端口加上 1。
4
(可选)允许的最大代理端口数。根据操作规则允许的最大代理数设置这个值。默认值为 3。
5
(可选)目标集群中最低的代理 ID。默认值为 0。这应该与目标集群中最低的 node.id (或 broker.id)匹配。
6
(可选)绑定端口时使用的绑定地址。如果未定义,则绑定所有网络接口。

每个代理的 ID 必须大于或等于 lowestTargetBrokerId,且小于 lowestTargetBrokerId + numberOfBrokerPorts。将节点 ID 映射到端口的当前策略如下: nodeId brokerStartPort + nodeId - lowestTargetBrokerId。示例配置将代理 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
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

3.5.2. 节点 ID 范围供应商

作为代理地址供应商的替代方法,节点 ID 范围供应商允许您为目标集群中的特定节点 ID 建模,实现有效的端口分配,即使代理 ID 没有排序或广泛空间,可以确保节点 ID 映射到端口,同时最小化所需的端口数量。

节点 ID 范围配置示例

clusterNetworkAddressConfigProvider:
  type: RangeAwarePortPerNodeClusterNetworkAddressConfigProvider
  config:
    bootstrapAddress: mycluster.kafka.com:9192
    brokerAddressPattern: mybroker-$(nodeId).mycluster.kafka.com
    brokerStartPort: 9193
    nodeIdRanges: 
1

      - name: brokers 
2

        range:
          startInclusive: 0 
3

          endExclusive: 3 
4
Copy to Clipboard Toggle word wrap

1
节点 ID 范围列表,它必须是非空的。
2
范围的名称,它在 nodeIdRanges 列表中必须是唯一的。
3
范围的开头(包括)。
4
范围结束(exclusive)。它必须大于 startInclusive; 不允许为空的范围。

节点 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 范围配置示例

    clusterNetworkAddressConfigProvider:
      type: RangeAwarePortPerNodeClusterNetworkAddressConfigProvider
      config:
        bootstrapAddress: mycluster.kafka.com:9192
        nodeIdRanges:
          - name: controller
            range:
              startInclusive: 0
              endExclusive: 3
          - name: brokers
            range:
              startInclusive: 1000
              endExclusive: 1003
          - name: broker-outlier
            range:
              startInclusive: 99999
              endExclusive: 100000
Copy to Clipboard Toggle word wrap

此配置会导致从节点 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 路由地址供应商配置示例

clusterNetworkAddressConfigProvider:
  type: SniRoutingClusterNetworkAddressConfigProvider
  config:
    bootstrapAddress: mycluster.kafka.com:9192 
1

    brokerAddressPattern: mybroker-$(nodeId).mycluster.kafka.com
    bindAddress: 192.168.0.1
Copy to Clipboard Toggle word wrap

1
所有流量的单一地址,包括 bootstrap 地址和代理。

在 SNI 路由地址配置中,brokerAddressPattern 规格是必需的,因为需要为每个代理生成路由。

注意

使用公共云的负载均衡器时,单个端口操作可能会具有成本优势,因为它允许在所有虚拟集群中共享单个云供应商负载均衡器。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat