docker 部署kafka,listeners配置
先看如何配置
############################# Socket Server Settings #############################
# The address the socket server listens on. If not configured, the host name will be equal to the value of
# java.net.InetAddress.getCanonicalHostName(), with PLAINTEXT listener name, and port 9092.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
listeners=INNER://:9092,OUTSIDE://:59092
advertised.listeners=INNER://<容器ip>:9092,OUTSIDE://<宿主机ip>:59092
listener.security.protocol.map=INNER:PLAINTEXT,OUTSIDE:PLAINTEXT
inter.broker.listener.name=INNER
配置说明
kafka对这两个参数的说明:
- KAFKA_LISTENERS=PLAINTEXT://<addr>:<port>
定义kafka的服务监听地址,addr可以为空,或者0.0.0.0,表示kafka服务会监听在指定地址。 - KAFKA_ADVERTISED_LISTENERS
kafka发布到zookeeper供客户端使用的服务地址,格式也是PLAINTEXT://<addr>:<port>,但是addr不能为空。
如果KAFKA_ADVERTISED_LISTENERS没有定义,则是取的KAFKA_LISTENERS的值。
如果KAFKA_LISTENERS的addr没有定义,则取的java.net.InetAddress.getCanonicalHostName()值。
结果是:
在容器内kafka服务 监听在两个端口9092和59092
容器网络使用<container>:9092访问kafka,主机网络使用<host>:59092访问kafka
容器启动: docker run -d -p 50001:22 -p 54000:4000 -p 52379:2379 -p 53000:3000 -p 59092:59092 -p 58300:8300 --name mydocker.tidb --privileged=true 867449966e58 /usr/sbin/init