zookeeper.connect=localhost:2181
/etc/host
如下所示:127.0.0.1 localhost MaatPro.local 255.255.255.255 broadcasthost ::1 localhost MaatPro.local fe80::1%lo0 localhost MaatPro.local
我的场景
"localhost:9092"
问题
(o.a.k.clients.NetworkClient) [Producer clientId=producer-1] Connection to node 0 could not be established. The broker may not be available.
使用 Kubernetes,我构建了以下 YAML 文件来部署我的 pod:
apiVersion: v1
kind: Pod
metadata:
name: fetcher
spec:
hostNetwork: true
containers:
- image: entellectextractorsfetchers:0.1.0-SNAPSHOT
name: fetcher
我采取预防措施设置主机网络:真
直接使用 Docker 守护程序,我最初也尝试将网络设置为主机,但发现这不适用于 docker for mac。因此,我放弃了那条路线。我知道这与虚拟化有关。
1)docker出现的虚拟化问题和我本地的kubernetes一样吗?基本上,主机网络是虚拟机而不是我的mac?
2) 我尝试更改我的代码并将以下地址添加为引导服务器: host.docker.internal 根据文档。但问题仍然存在。根本问题是我正在处理环回地址吗?我真的应该在我的网络地址上工作吗? host.docker.internal 指向哪个地址?我怎样才能使它与环回地址一起工作?如果我完全关闭,知道我需要实现什么才能使其正常工作吗?
非常感谢您对此提供的任何帮助。
最佳答案
基于@cricket_007 指导 Kafka Listeners - Explained以及我在这个问题上到处阅读的许多内容,包括官方 docker 文档 I Want to connect from a container to a servicer on the host
我想出了以下解决方案。
我将以下内容添加到我的默认本地 kafka 配置(即 server.properties)
listeners=EXTERNAL://0.0.0.0:19092,INTERNAL://0.0.0.0:9092 listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT advertised.listeners=INTERNAL://127.0.0.1:9092,EXTERNAL://docker.for.mac.localhost:19092 inter.broker.listener.name=INTERNAL
实际上这里的外部是预计 成为 docker 网 .此配置仅适用于我的 OSX 机器,用于我的本地开发目的。我不希望连接到我的笔记本电脑的人使用我本地的 kafka,因此我可以使用
EXTERNAL://docker.for.mac.localhost:19092.
这就是在 docker/kube 中向我的容器宣传的内容。在该网络中,可以访问 docker.for.mac.localhost。请注意,这可能不适用于 Minikube。这是特定于 Docker For Mac 的。我在我的机器上运行的 kubernetes 是 docker for mac 自带的,而不是 minikube。
最后在我的代码中,我在列表中同时使用
"localhost:9092, docker.for.mac.localhost:19092"
我使用 typeSafe 配置,因此在 prod 中,这会被 env 变量删除。如果未指定 env 变量,则使用此变量。当我从 Intellij
localhost:9092
运行我的微服务时用来。那是因为在这种情况下,我和我机器中的 kafka/zookeeper 处于同一个网络中。但是,当我从 docker/kube docker.for.mac.localhost:19092
运行相同的微服务时用来。我的附带问题的答案
关于docker - 从本地 Docker For Mac 中部署的服务访问本地 Kafka(包括 Kubernetes 扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996028/