在网络方面有点新手。。。
我有一个kafka集群(1个主集群和1个工作集群)在我笔记本电脑上的2个vbox vm上运行,使用docker swarm。此vm具有设置为单个ip地址的网桥适配器。确切的yaml是
enp0s8:
dhcp4: no
renderer: networkd
addresses: [192.168.0.50/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
我尝试运行一个本地python脚本,它连接到我的kafka集群。当我在我的笔记本电脑上这样做的时候,它可以工作,但是当我在docker容器中运行相同的python脚本时,它就不工作了!
这几乎缩小到一个网络问题。我试过用 --net=host
但还是不行。不明白为什么我的docker容器不能连接到虚拟机的ip地址,但在我的macbook上运行良好。
编辑:
为了进一步澄清python脚本。。。整个脚本如下:
from kafka.consumer import KafkaConsumer
def create_kafka_consumer(topic, group_id, brokers):
return KafkaConsumer(topic,
bootstrap_servers=brokers,
auto_offset_reset='earliest',
enable_auto_commit=True,
group_id=group_id,
value_deserializer=lambda x: x.decode('utf-8'))
GROUP_ID = 'test'
def main():
topic ='airbnb'
c = create_kafka_consumer(topic, 'tester', '192.168.0.51:9093')
for msg in c:
print(msg)
if __name__ == '__main__':
main()
ip地址和端口用于kafka工作节点(在虚拟机中运行),而不是主节点(上面列出的ip地址)。我在vm中设置了ip,并且在docker compose文件中手动设置了端口。
成功输出示例(仅打印所有kafka日志):
消费者记录(topic='airbnb',partition=0,offset=169,timestamp=1598650807052,timestamp\u type=0,key=none,value='adivinen quien cogio un airbnb para salir de la rutina y tiene que trabajar el weekend?',headers=[]、checksum=none、serialized_key_size=-1、serialized_value_size=111、serialized_header_size=-1)消费者记录(topic='airbnb',partition=0、offset=170、timestamp=1598650821359、timestamp_type=0、key=none、value='this x100%',headers=[]、checksum=none、serialized_key_size=-1、serialized_value_size=10、serialized_header_size=-1)
输出不成功:
回溯(最近一次调用last):文件“tmp/consumer kafka.py”,第21行,在main()文件“tmp/consumer kafka.py”,第16行,在main c=create\u kafka\u consumer(topic,'tester','192.168.0.51:9093')文件“tmp/consumer kafka.py”,第11行,在init self.\u client=kafkaclient(metrics=self.\u metrics,**self.config)file“/usr/local/lib/python3.6/site packages/kafka/consumer/group.py”第355行的init self.\u client=kafkaclient(metrics=self.\u metrics,**self.config)文件“/usr/local/lib/python3.6/site packafka/client\u async.py”第242行的create\u kafka\consumer/,在init self.config['api\u version']=self.check\u version(timeout=check\u timeout)file“/usr/local/lib/python3.6/site packages/kafka/client\u async.py”的第925行中,在check\u version raise errors.nobrokersavable()kafka.errors.nobrokersavable:nobrokersavable中
Kafka工人 netstat -ntl
命令输出:
1条答案
按热度按时间uubf1zoe1#
在运行docker container时,您是否尝试过使用--link选项与2个容器通信这将在/etc/hosts文件中添加一个条目(或者您可以手动尝试并检查)
我想这可能会帮助你:https://docs.docker.com/network/links/
youtube网站:https://www.youtube.com/results?search_query=docker+linking+multiple+containers
如果这两个都不适合你在docker中的一些dns的fit研究,这可能与dns有关:-)