【发布时间】:2021-01-07 00:38:54
【问题描述】:
我有一种情况,Kafka 使用网络中的特定 IP 地址在 docker 容器中运行。使用以下命令创建网络
sudo docker network create --subnet=172.19.0.0/16 --gateway 172.19.0.1 --ip-range=172.19.0.1/24 my_net
Kafka 容器使用以下方式启动
docker run -d --name kafkanode --net my_net --hostname=kafkahost01 kafka_zook:212-358 -p 2181:2181 -p 9092:9092 tail -f /dev/null
我有来自不同容器的同一主机中的生产者。 Kafka 的 server.properties 如下所示的简单配置适用于同一主机内和不同容器中的生产者。
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafkahost01:9092
但是,在我们的例子中,我们将有生产者,他们也将从该机器外部发送消息。
不幸的是,我无法从 docker 主机外部进行连接。有人可以帮我配置一下吗?
我们使用的是 Kafka 2.12-2.6.0 动物园管理员——3.5.8
使用以下值编辑的服务器属性
listeners=INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://kafkahost01:29092,EXTERNAL://10.20.30.40:9092
inter.broker.listener.name=INTERNAL
谢谢 巴拉吉
【问题讨论】:
-
只需为外部访问添加另一个侦听器
-
@OneCricketeer 和 x4k3p 谢谢。收到以下错误 INFO:kafka.conn:
[IPv4 ('10.20.30.40', 9092)]>: Connection complete。 Traceback(最近一次通话最后): producer.send(b'tweets',value=kafka_data) 文件“C:kafka.py”,第 576 行,在 send self._wait_on_metadata(topic, self.config['max_block_ms'] / 1000.0) _wait_on_metadata 中的文件“C:kafka.py”第 702 行引发 Errors.KafkaTimeoutError(kafka.errors.KafkaTimeoutError: KafkaTimeoutError: 60.0 秒后更新元数据失败。 -
server.properties 有如下配置 listeners=INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092 listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL: PLAINTEXT advertised.listeners=INTERNAL://kafkahost01:29092,EXTERNAL://10.20.30.40:9092 inter.broker.listener.name=INTERNAL
-
@OneCricketeer 我可以通过 kafkacat kafkacat -b 10.20.30.40:9092 -L 所有主题的元数据(来自代理 0:144.25.103.235:9092/0)从另一台机器连接:1经纪人:经纪人 0 在 10.20.30.40:9092 2 个主题:主题“推文”有 1 个分区:我进一步测试了来自不同机器的 nc -vz 10.20.30.40 9092。 Ncat:版本 7.50 (nmap.org/ncat) Ncat:连接到 10.20.30.40:9092。 Ncat:0.01 秒内发送 0 个字节,接收 0 个字节。不知道可能出了什么问题。
标签: docker apache-kafka apache-zookeeper