【发布时间】:2021-06-08 06:13:22
【问题描述】:
作为 docker 和 kafka 世界的初学者, 我试图在我的本地机器上连接在桥接网络上的 docker 容器中运行的 kafka,现在我想从本地连接 kafka,我经历了这个link
以下是来自上述链接的 docker compose 快照
kafka0:
image: "confluentinc/cp-enterprise-kafka:5.2.1"
ports:
- '9092:9092'
- '29094:29094'
depends_on:
- zookeeper
environment:
[…]
# For more details see See https://rmoff.net/2018/08/02/kafka-listeners-explained/
KAFKA_LISTENERS: LISTENER_BOB://kafka0:29092,LISTENER_FRED://kafka0:9092,LISTENER_ALICE://kafka0:29094
KAFKA_ADVERTISED_LISTENERS: LISTENER_BOB://kafka0:29092,LISTENER_FRED://localhost:9092,LISTENER_ALICE://never-gonna-give-you-up:29094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_BOB:PLAINTEXT,LISTENER_FRED:PLAINTEXT,LISTENER_ALICE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_BOB
[…]
如果使用此配置,我可以从本地计算机连接到 kafka
kafkacat -b localhost:9092 \
> -L
Metadata for all topics (from broker 1002: localhost:9092/1002):
1 brokers:
broker 1002 at localhost:9092
但我不明白它是如何工作的,
我的理解是,当客户端想要连接到 kafka 时,它需要在这种情况下提供代理地址 KAFKA_LISTENERS,连接后客户端将获得包含 KAFKA_ADVERTISED_LISTENERS 中提供的代理实际 IP 信息的元数据
现在我的疑问是:根据 docker compose 中的配置,我们正在使用 FRED 侦听器,如果我们想从本地机器连接 kafka,但在 KAFKA_LISTENERS 中,我们给出了 LISTENER_FRED://kafka0:9092,它无法从本地访问,所以如何这个工作,只要我把它改成LISTENER_FRED://localhost:9092
出错了
kafkacat -b localhost:9092 -C -t beats
% ERROR: Failed to query metadata for topic beats: Local: Timed out
但如果在KAFKA_LISTENERS 中设置LISTENER_FRED://kafka0:9092 则有效
任何帮助将不胜感激。
【问题讨论】:
-
这可能会有所帮助:confluent.io/blog/…
标签: docker apache-kafka