【发布时间】:2019-04-14 07:28:48
【问题描述】:
我正在尝试使用 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 内外工作?
【问题讨论】:
-
你能链接到你提到的两个不一致的文档吗?如果有歧义,最好修复它们。
-
它在hub.docker.com/r/wurstmeister/kafka“监听器配置”部分。这不是 kafka 文档,而是 wurstmeister docker 映像:“Kafka 的更高版本已弃用 Advertisementd.host.name 和 Advertisementd.port。注意:advertising.host.name 和 Advertisementd.port 仍然按预期工作,但在配置时不应使用听众。”
-
对了。 FWIW Confluent 这里有全套 Kafka 镜像:hub.docker.com/u/confluentinc
标签: docker apache-kafka docker-compose