Kafka通过**多监听器(Listeners)**机制支持多种协议(如PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL等),允许客户端、Broker间根据场景选择不同协议(如内网用明文、外网用加密)。以下是核心配置及实践说明:
listeners协议名称://主机名:端口,多个监听器用逗号分隔。listeners=INTERNAL://192.168.1.100:9092,EXTERNAL://10.0.0.100:9093(内网用INTERNAL协议,外网用EXTERNAL协议)。0.0.0.0(可能导致客户端无法解析)。advertised.listenersadvertised.listeners=INTERNAL://kafka-internal:9092,EXTERNAL://kafka.example.com:9093(客户端通过kafka.example.com:9093访问外网,通过kafka-internal:9092访问内网)。listeners的值,但advertised.listeners不支持0.0.0.0。listener.security.protocol.maplistener.security.protocol.map=INTERNAL:SASL_PLAINTEXT,EXTERNAL:SSL(INTERNAL监听器使用SASL+明文认证,EXTERNAL监听器使用SSL加密)。PLAINTEXT(明文,不安全)、SSL(加密,无认证)、SASL_PLAINTEXT(SASL认证+明文)、SASL_SSL(SASL认证+加密)。inter.broker.listener.namelisteners中定义),确保集群内部通信的安全性和隔离性。inter.broker.listener.name=INTERNAL(Broker间通过INTERNAL监听器通信,使用SASL_PLAINTEXT协议)。listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093
advertised.listeners=INTERNAL://localhost:9092,EXTERNAL://your-public-ip:9093
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
inter.broker.listener.name=INTERNAL
localhost:9092访问(明文),外网客户端通过your-public-ip:9093访问(SSL加密)。listeners=INTERNAL://192.168.1.100:9092,EXTERNAL://10.0.0.100:9093
advertised.listeners=INTERNAL://kafka-internal:9092,EXTERNAL://kafka.example.com:9093
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
inter.broker.listener.name=INTERNAL
listener.security.protocol.map中的协议必须与listeners中的自定义协议一一对应,否则会报错(如No security protocol defined for listener XXX)。advertised.listeners中的主机名需能被客户端解析(如通过DNS或hosts文件),避免使用localhost或0.0.0.0。SASL_SSL(认证+加密),避免敏感数据泄露。server.properties后需重启Kafka服务,可通过kafka-configs.sh动态调整部分参数(如listeners)。