我正在尝试使用docker-compose启动kafka服务,并且应该可以在docker内部和外部进行访问。因此,应该在内部和外部设置合适的广告客户:
version: '3' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9094:9092" environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094 KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094 KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
问题是,当我尝试从群集外部进行连接时,节点名称不是127.0.0.1,而是内部主机名:
$ kafkacat -L -b 127.0.0.1:9094 Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap): 1 brokers: broker 1001 at 91588ea968d4:9092 28 topics: ...
这不是KAFKA_ADVERTISED_LISTENERS和KAFKA_LISTENERS处理这种情况的目的吗?我尝试设置KAFKA_ADVERTISED_HOST_NAME,但是它被忽略了(一个文档说它已被弃用,另一个说它仍然处于活动状态),但这似乎不是答案,因为我想要两个不同网络的两个不同的公告主机名。
我想仍然存在一个老问题:如何使kafka在docker-compose内部和外部工作?
您的侦听器配置看起来正确,问题出在您的Docker Compose上:
ports: - "9094:9092"
您正在将9094(’Outside’)映射回9092(’Inside’),因此当您连接时,您正在连接到’Inside’侦听器。如果删除此配置行,则您的侦听器设置应该可以正常工作。
9094
9092
有关更多信息,请参见http://rmoff.net/2018/08/02/kafka-listeners- explained/