5.1 监听地址
监听地址以及如何开启多种协议访问
listeners
: 配置开启监听的方式与地址,格式为listeners=<listener_name>://[ip_or_hostname]:<port>,{<listener_name>://[ip_or_hostname]:<port>}
listener_name
可以决定 security protocolip_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.protocol
和 inter.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。