跳转至

5.1 监听地址

监听地址以及如何开启多种协议访问

  • listeners: 配置开启监听的方式与地址,格式为 listeners=<listener_name>://[ip_or_hostname]:<port>,{<listener_name>://[ip_or_hostname]:<port>}
    • listener_name 可以决定 security protocol
    • ip_or_hostname 必须是本地可以监听的地址(本地IP,localhost,0.0.0.0 等),也可以为空
    • port 必须是本地可以监听的端口
  • advertised.listeners: listeners 监听的地址必须是本地地址,如果想通过外网 ip 访问 broker,则需要通过 advertised.listeners 将外网 IP 注册到 zookeeper 中,kafka 对外的 metadata 里 broker 的连接地址优先使用 advertised.listeners 配置的地址
  • listener.security.protocol.map: map a listener name to a security protocol,map 的 key (即 listener name) 只应该出现一次,但是 values (即 security protocol) 可以出现多次。如果没有指定这项配置,listener name 默认与 security protocol 相同。这项配置可以给不同 listener 其更容易理解的名字,同样可以通过用不同的 listener name 映射相同的 security protocol,达到开启多个相同 security protocol 端口的监听的作用

下面给一个示例:

listeners=BROKER_DATA://:9090\
    ,BROKER_CONTROL://:9091\
    ,VPC_CLIENT://:9092\
    ,SASL_CLIENT://:9093\
    ,SSL_CLIENT://:9094\
    ,EXT_CLIENT://:9095

advertised.listeners=BROKER_DATA://192.168.64.7:9090\
    ,BROKER_CONTROL://192.168.64.7:9091\
    ,VPC_CLIENT://192.168.64.7:9092\
    ,SASL_CLIENT://192.168.64.7:9093\
    ,SSL_CLIENT://180.76.145.54:9094\
    ,EXT_CLIENT://180.76.145.54:9095

listener.security.protocol.map=BROKER_DATA:PLAINTEXT\
    ,BROKER_CONTROL:PLAINTEXT\
    ,VPC_CLIENT:PLAINTEXT\
    ,SASL_CLIENT:SASL_PLAINTEXT\
    ,SSL_CLIENT:SSL\
    ,EXT_CLIENT:SASL_SSL

示例中配置了 6 个监听地址:

  • BROKER_DATA: broker 内部数据交互,使用 PLAINTEXT security protocol,通过内网 ip 与 9090 端口访问
  • BROKER_CONTROL: broker 内部 controller 请求交互,使用 PLAINTEXT security protocol,通过内网 ip 与 9091 端口访问
  • VPC_CLIENT: 提供内网 client 访问,使用 PLAINTEXT security protocol,通过内网 ip 与 9092 端口访问
  • SASL_CLIENT: 提供内网 client 访问,使用 SASL_PLAINTEXT security protocol,通过内网 ip 与 9093 端口访问
  • SSL_CLIENT: 提供外网 client 访问,使用 SSL security protocol,通过外网 ip 与 9094 端口访问
  • EXT_CLIENT: 提供外网 client 访问,使用 SASL_SSL security protocol,通过外网 ip 与 9095 端口访问

broker 内部交互

inter.broker.listener.name=BROKER_DATA

control.plane.listener.name=BROKER_CONTROL

## 如果内部交互通过 SASL 相关协议,还需要指定机制
## SASL mechanism used for communication with controllers.
#sasl.mechanism.controller.protocol=PLAIN
#
## SASL mechanism used for inter-broker communication.
#sasl.mechanism.inter.broker.protocol=PLAIN

还有一个相关参数 security.inter.broker.protocol,同时设置 security.inter.broker.protocolinter.broker.listener.name 是错误的,inter.broker.listener.name 默认是 null, 即 PLAINTEXT 协议会被默认使用

listener name 级别的配置

可以通过在 listener name 增加前缀(listener name 需要小写)作为 config name 为不同 listener name 提供不同 security (SSL and SASL) 设置。例如:

SSL

如果想要给 CLIENT listener 设置不同的 keystore,可以增加配置 listener.name.client.ssl.keystore.location,如果针对 listener name 的配置没有设置,会退化到通常的设置(即 ssl.keystore.location)。

SASL

对于 SASL,一些配置是通过 JAAS 文件提供的,JAAS 文件是由 1 个或多个 entries 组成。 对于 CLIENT listener,broker 会优先找以 client.KafkaServer 为 entry name 的 entry,如果找不到,broker 会找 entry name 为 KafkaServer 的 entry。