Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 多克,卡夫卡-复制不';远程代理之间无法工作_Docker_Apache Kafka - Fatal编程技术网

Docker 多克,卡夫卡-复制不';远程代理之间无法工作

Docker 多克,卡夫卡-复制不';远程代理之间无法工作,docker,apache-kafka,Docker,Apache Kafka,有卡夫卡经纪人和动物园管理员的docker图像-现在就叫他们z1、b1、b2。 它们部署在两台物理服务器上:s1和s2,因此: s1包含z1和b1 s2包含b2 zookeeper在自己的docker compose.yml文件中设置了如下端口: - 2181:2181 - 2888:2888 - 3888:3888 - 9092:9092 和经纪人如下: - 2181:2181 - 2888:2888 - 3888:3888 - 9092:9092 可以创建带有--复制因子2和--分区

有卡夫卡经纪人和动物园管理员的docker图像-现在就叫他们
z1、b1、b2
。 它们部署在两台物理服务器上:
s1
s2
,因此:
s1
包含
z1
b1

s2
包含
b2

zookeeper在自己的
docker compose.yml
文件中设置了如下端口:

- 2181:2181
- 2888:2888
- 3888:3888
- 9092:9092
和经纪人如下:

- 2181:2181
- 2888:2888
- 3888:3888
- 9092:9092
可以创建带有
--复制因子2
--分区4
的主题。
整个时间内没有数据被推送到主题,但仍然出现以下问题。
如果
kafka topics--descripe--topic--zookeeper
在主题创建后不久运行,则一切都是
insync
,看起来很好。
在第二次运行时(短延迟),
b1
从其
insync
中删除
b2
分区副本,但是
b2
不会从
insync
中删除
b1
分区副本

b1
的server.log中,显示了许多异常:

WARN [ReplicaFetcherThread-0-1], Error in fetch kafka.server.ReplicaFetcherThread$FetchRequest@42746de3 (kafka.server.ReplicaFetcherThread)
java.io.IOException: Connection to ef447651b07a:9092 (id: 1 rack: null) failed
    at kafka.utils.NetworkClientBlockingOps$.awaitReady$1(NetworkClientBlockingOps.scala:83)
    at kafka.utils.NetworkClientBlockingOps$.blockingReady$extension(NetworkClientBlockingOps.scala:93)
    at kafka.server.ReplicaFetcherThread.sendRequest(ReplicaFetcherThread.scala:248)
    at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:238)
    at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:42)
    at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:118)
    at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:103)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)
在代理
b1
b2
之间交换领导力是有效的,因为它们会关闭并重新启动,但只有最后一个在线的代理完全控制主题-是所有分区的领导者,只有一个
insync
,即使另一个代理重新在线

尝试清理所有数据,重置代理和zookeeper,但问题仍然存在


为什么分区没有正确复制?

看起来代理
b1
b2
无法相互通信,这表明存在与Docker相关的网络问题(此类Docker网络问题通常很常见)


您需要共享更多信息以获得进一步帮助,例如
docker compose.yml
文件的内容以及用于创建图像的
Dockerfile
。我还想知道为什么您为这两个代理创建了不同的映像,通常您只需要一个Kafka代理映像,然后从该映像启动多个容器(每个所需的代理一个)。

看起来代理
b1
b2
无法相互通信,这表明与Docker相关的网络问题(此类Docker网络问题通常很常见)


您需要共享更多信息以获得进一步帮助,例如
docker compose.yml
文件的内容以及用于创建图像的
Dockerfile
。我还想知道为什么您为两个代理创建了不同的映像,通常您只需要一个Kafka代理映像,然后只需从该映像启动多个容器(每个所需代理一个)。

我找到了答案。正如Michael G.Noll所说,网络存在问题。
首先,我不再手动映射端口,而是使用
host
网络。更容易管理。
其次,b1和b2的侦听器设置如下:

listeners=PLAINTEXT://:9092
他们都没有指定ip,因此默认使用
0.0.0.0
,并且存在冲突,因为他们都在那里监听并将相同的连接信息推送到zookeeper

最终配置
b1
b2
docker compose.yml
使用
host
网络:

network_mode: "host"
b1
server.properties`-侦听器:

listeners=PLAINTEXT://<s1_IP>:9092
listeners=PLAINTEXT://<s2_IP>:9092
现在一切正常,复制工作正常,即使在代理重新启动时也是如此。
数据可以正确地生成和使用。

我想出来了。正如Michael G.Noll所说,网络存在问题。
首先,我不再手动映射端口,而是使用
host
网络。更容易管理。
其次,b1和b2的侦听器设置如下:

listeners=PLAINTEXT://:9092
他们都没有指定ip,因此默认使用
0.0.0.0
,并且存在冲突,因为他们都在那里监听并将相同的连接信息推送到zookeeper

最终配置
b1
b2
docker compose.yml
使用
host
网络:

network_mode: "host"
b1
server.properties`-侦听器:

listeners=PLAINTEXT://<s1_IP>:9092
listeners=PLAINTEXT://<s2_IP>:9092
现在一切正常,复制工作正常,即使在代理重新启动时也是如此。
数据可以正确生成和使用。

感谢您的回复。我不能在这里粘贴docker文件;这将是毫无意义的,因为现在只有网络设置才重要。docker-compose.yml中的端口映射如上所述,zookeepers客户端端口设置为2181;两位卡夫卡经纪人都有监听器=明文://127.0.0.1:9092。我还尝试不指定ip和更改端口,以便将代理映射到0.0.0.0:9092和0.0.0.0:9093,但问题仍然存在。另外,请阅读关于复制侦听器的内容-是否应将其设置为仅指定纯文本?您的环境是什么?您是在Mac上本地运行还是在Kubernetes内部运行?您是使用带Linux虚拟机的docker机器,还是。。。?这会影响Docker的网络功能。此外,显示docker文件并不是毫无意义的,因为您不断询问有关docker设置的问题,并且在看不到完整情况时很难帮助您进行调试,例如主机网络模式或网桥网络模式?如何设置容器的
主机名
?感谢您的回复。我不能在这里粘贴docker文件;这将是毫无意义的,因为现在只有网络设置才重要。docker-compose.yml中的端口映射如上所述,zookeepers客户端端口设置为2181;两位卡夫卡经纪人都有监听器=明文://127.0.0.1:9092。我还尝试不指定ip和更改端口,以便将代理映射到0.0.0.0:9092和0.0.0.0:9093,但问题仍然存在。另外,请阅读关于复制侦听器的内容-是否应将其设置为仅指定纯文本?您的环境是什么?您是在Mac上本地运行还是在Kubernetes内部运行?您使用的是带有Linux虚拟机的docker机器,还是。。