docker - 无法连接到网络外的kafka
问题描述
我正在尝试将我的工作连接到一个容器中,该容器将事件发送到另一个容器中的 kafka 集群。无论我尝试了什么,我都无法将事件发送到 kafka 主题我已经尝试过 telnet 和 kafkacat 到我的 kafka 的地址侦听器端口,一切正常:
这是我的工作撰写文件,“172.16.33.91”是我的本地 IP 地址:
version: '3'
services:
events-processor:
build:
context: ./events-processor
extra_hosts:
- "host:172.16.33.91"
restart: unless-stopped
这是我的工作代码,它将数据从 1 -> 1000 发送到现有主题num-test:
from time import sleep
from json import dumps
from kafka import KafkaProducer
if __name__=="__main__":
producer = KafkaProducer(bootstrap_servers=['host:9093'],
value_serializer=lambda x: dumps(x).encode('utf-8'))
for e in range(1000):
data = {'number' : e}
producer.send('numtest', value=data)
print(data)
sleep(5)
这是我的 kafka-zookeeper 撰写文件:
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- zk-data:/var/lib/zookeeper/data
- zk-logs:/var/lib/zookeeper/log
- secrets:/etc/zookeeper/secrets
restart: unless-stopped
kafka:
image: confluentinc/cp-kafka
depends_on:
- zookeeper
ports:
- "9093:9093"
environment:
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_LISTENERS: INTERNAL://:9092,EXTERNAL://:9093
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
volumes:
- kafka-data:/var/lib/kafka/data
- secrets:/etc/kafka/secrets
restart: unless-stopped
volumes:
zk-logs: {}
zk-data: {}
kafka-data: {}
secrets: {}
有人知道我做错了什么吗?任何帮助表示赞赏!
解决方案
我记得遇到过类似的连接问题。事实证明,为了让您的容器能够访问主机上的端口,您可能需要向防火墙添加额外的规则以将其打开。
例如,使用 iptables,您可以添加如下规则,以允许您的主机接受来自 docker 容器的请求。
-A INPUT -i docker0 -j ACCEPT
或者,您可以将您的作业容器与您的 kafka/zookeeper 放在同一个 docker 网络上。通过将您的应用程序放在同一个 docker-compose 文件中,或使用通用的外部 docker 网络。
推荐阅读
- url - 如何更改wildfly中的根URL
- laravel - 如何在注册前将 OTP 发送到 Laravel 中的用户电话号码
- python-2.7 - EC2 实例的已安装 ssm 补丁列表中的负时间戳
- javascript - react-native 风格
- c# - 如何将文本添加到文本框
- wpf - 带有跟踪和选择问题的 WPF 双列表框菜单
- spring-boot - spring boot rest api mockito + mockmvc 持久化
- c - 如何修复 Clion for Window 上的“gcc 未被识别为内部命令”?
- matlab - 将结果存储在矩阵中
- powershell - 加载程序集并按计划任务运行不兼容?