Docker swarm:org.apache.kafka.common.errors.TimeoutException:等待节点分配超时

时间:2019-12-06 14:14:46

标签: java networking apache-kafka containers docker-swarm

我正在尝试对使用 kafka 的Java服务器应用程序进行容器化。我观察到了这种行为,

案例1:作为单个容器运行使用网桥

在这种情况下,效果很好。所以没问题。

案例2:作为一项服务运行时使用覆盖网络(群体模式)

在这种情况下,由于连接失败,我得到了org.apache.kafka.common.errors.TimeoutException

WARN [2019-12-06T14:05:44,668] RequestSendThread: warn(): [Controller-0-to-broker-0-send-thread]: Controller 0's connection to broker 10.255.3.64:10101 (id: 0 rack: null) was unsuccessful
java.net.SocketTimeoutException: Failed to connect within 30000 ms
        at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:270) [kafka_2.12-1.0.0.jar:?]
        at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:223) [kafka_2.12-1.0.0.jar:?]
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:64) [kafka_2.12-1.0.0.jar:?]

我对 kafka 不太了解,也无法理解覆盖网络如何影响kafka进程,而在桥接网络中却能很好地发挥作用

编辑1:

几乎发现了问题...在docker群模式下,由于有两个接口bridgeoverlay,容器具有两个IP地址。 ip是endpoint:172.19.0.3, 10.255.3.65

尝试连接到容器(位于同一容器内部)时,

网桥I / F: 172.19.0.3 : 10101-可以连接。表示telent 172.19.0.3 10101有效。 覆盖I / F: 10.155.3.65 : 10101-无法连接到端口,但可以ping通。

制造10.155.3.65的kafka使用的虚拟IP TimeoutException

使用覆盖IP时无法连接到本地主机端口(但可以ping通)。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

答案:

我的坏。我使用了default覆盖层来解决问题。.https://docs.docker.com/network/overlay/

创建一个--attachable自定义覆盖网络解决了此问题。

docker network create -d overlay --attachable my-attachable-overlay