有kafka经纪人和动物园管理员的码头图像 - 现在称其为z1, b1, b2
。 他们被部署在两台物理服务器s1
和s2
像这样:
s1
包含z1
和b1
s2
包含b2
Docker,Kafka - 复制在远程经纪人之间不起作用
在自己的docker-compose.yml
文件,动物园管理员已经设置端口如下:
- 2181:2181
- 2888:2888
- 3888:3888
和经纪人如下:
- 9092:9092
可以创建--replication-factor 2
和--partitions 4
的主题。
整个时间内没有数据被推送到主题,但仍然出现以下问题。
如果kafka-topics --describe --topic <name_of_topic> --zookeeper <zookeeperIP:port>
在主题创建后不久运行,则全部为insync
,并且看起来不错。
在第二轮(有短暂的延迟),b1
删除b2
分区副本从它的insync
,但b2
不会insync
删除b1
分区副本。
在从b1
server.log中,有许多展示这些异常:
WARN [ReplicaFetcherThread-0-1], Error in fetch [email protected] (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
。
尝试清理所有数据,重置经纪人和动物园管理员,但问题仍然存在。
为什么分区没有正确复制?
感谢您的回复。我无法在这里粘贴docker文件;因为现在只有网络设置很重要,所以它毫无意义。 docker-compose.yml中的端口如问题所述映射,zookeepers客户端端口设置为2181;并且两个kafka经纪人都有听众= PLAINTEXT://127.0.0.1:9092。我也试过不指定IP和更改端口,所以经纪人被映射到0.0.0.0:9092和0.0.0.0:9093,但问题仍然存在。还请阅读REPLICATION侦听器 - 是否应该将其设置为我只有PLAINTEXT指定的? – milkamar
你的环境是什么?你运行这个例如本地Mac或Kubernetes内?你在使用docker-machine或者Linux VM吗?或者...?这会影响Docker的网络功能。此外,显示Docker文件并不毫无意义,因为您不断询问有关Docker设置的问题,并且在无法看到完整图片时很难帮助您进行调试 - 例如,主机网络模式还是网桥模式?你如何设置容器的'hostname'? –