主机上的 Kafka 消费者无法访问 docker 中 Kafka 生产者 运行 的消息
Kafka Consumer on host machine not accessing messages of Kafka Producer running in docker
我在主机上写了这个消费者代码
from kafka import KafkaConsumer
KAFKA_HOSTS = 'divolte-kafka:9092'
KAFKA_VERSION = (0,11,5)
topic = "csptest"
consumer = KafkaConsumer(topic, bootstrap_servers=KAFKA_HOSTS, api_version=KAFKA_VERSION)
for msg in consumer:
print(msg)
Kafka 安装在 docker 中具有此配置
version: "3.3"
services:
# Kafka/Zookeeper container
divolte-kafka:
image: krisgeus/docker-kafka
container_name: divolte-kafka
environment:
ADVERTISED_HOST: divolte-kafka
KAFKA_ADVERTISED_HOST_NAME: 192.168.65.0
LOG_RETENTION_HOURS: 1
AUTO_CREATE_TOPICS: "false"
KAFKA_CREATE_TOPICS: divolte:4:1
ADVERTISED_LISTENERS: OUTSIDE://divolte-kafka:9092,INTERNAL://localhost:9093
LISTENERS: OUTSIDE://0.0.0.0:9092,INTERNAL://0.0.0.0:9093
SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT,INTERNAL:PLAINTEXT
INTER_BROKER: INTERNAL
ports:
- 9092:9092 # kafka broker
expose:
- "9092"
networks:
- divolte.io
当我按如下方式尝试 运行 生产者和消费者时,它起作用了。但是当我启动生产者并访问主机中 python 中编写的消费者代码中的主题“csptest”时,我没有收到任何消息(没有打印任何内容)。谢谢你帮我。
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic csptest
# producer
./kafka-console-producer.sh --broker-list localhost:9092 --topic csptest
> dd
> hi
> jhj
# consumer
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic csptest --group topic_group
> dd
> hi
> jhj
当您在容器中时,您的 shell 脚本可以工作,但这无助于您在 Docker
之外测试代码 运行
您似乎翻转了内部和外部侦听器
从主机,你想在内部侦听器上连接,所以你需要暴露端口 9093 并在 localhost:9093 上连接,而不是使用 Kafka 容器服务名称
我在主机上写了这个消费者代码
from kafka import KafkaConsumer
KAFKA_HOSTS = 'divolte-kafka:9092'
KAFKA_VERSION = (0,11,5)
topic = "csptest"
consumer = KafkaConsumer(topic, bootstrap_servers=KAFKA_HOSTS, api_version=KAFKA_VERSION)
for msg in consumer:
print(msg)
Kafka 安装在 docker 中具有此配置
version: "3.3"
services:
# Kafka/Zookeeper container
divolte-kafka:
image: krisgeus/docker-kafka
container_name: divolte-kafka
environment:
ADVERTISED_HOST: divolte-kafka
KAFKA_ADVERTISED_HOST_NAME: 192.168.65.0
LOG_RETENTION_HOURS: 1
AUTO_CREATE_TOPICS: "false"
KAFKA_CREATE_TOPICS: divolte:4:1
ADVERTISED_LISTENERS: OUTSIDE://divolte-kafka:9092,INTERNAL://localhost:9093
LISTENERS: OUTSIDE://0.0.0.0:9092,INTERNAL://0.0.0.0:9093
SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT,INTERNAL:PLAINTEXT
INTER_BROKER: INTERNAL
ports:
- 9092:9092 # kafka broker
expose:
- "9092"
networks:
- divolte.io
当我按如下方式尝试 运行 生产者和消费者时,它起作用了。但是当我启动生产者并访问主机中 python 中编写的消费者代码中的主题“csptest”时,我没有收到任何消息(没有打印任何内容)。谢谢你帮我。
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic csptest
# producer
./kafka-console-producer.sh --broker-list localhost:9092 --topic csptest
> dd
> hi
> jhj
# consumer
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic csptest --group topic_group
> dd
> hi
> jhj
当您在容器中时,您的 shell 脚本可以工作,但这无助于您在 Docker
之外测试代码 运行您似乎翻转了内部和外部侦听器
从主机,你想在内部侦听器上连接,所以你需要暴露端口 9093 并在 localhost:9093 上连接,而不是使用 Kafka 容器服务名称