远程代理之间的复制不起作用

z3yyvxxp  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(348)

有Kafka经纪人和Zookeeper的docker图片-打电话给他们 z1, b1, b2 现在。它们部署在两个物理服务器上 s1 以及 s2 因此: s1 包含 z1 以及
b1 s2 包含 b2 以他们自己的方式 docker-compose.yml 文件中,zookeeper设置了如下端口:

  1. - 2181:2181
  2. - 2888:2888
  3. - 3888:3888

经纪人如下:

  1. - 9092:9092

主题 --replication-factor 2 以及 --partitions 4 可以创建。
在整个时间内没有数据被推送到主题,但仍然发生以下问题。
如果 kafka-topics --describe --topic <name_of_topic> --zookeeper <zookeeperIP:port> 在主题创建后不久运行 insync 看起来不错。
第二次运行时(短延迟), b1 删除 b2 从它的 insync ,但是 b2 不删除 b1 从分区副本 insync .
在server.log中 b1 ,有许多例外情况:

  1. WARN [ReplicaFetcherThread-0-1], Error in fetch kafka.server.ReplicaFetcherThread$FetchRequest@42746de3 (kafka.server.ReplicaFetcherThread)
  2. java.io.IOException: Connection to ef447651b07a:9092 (id: 1 rack: null) failed
  3. at kafka.utils.NetworkClientBlockingOps$.awaitReady$1(NetworkClientBlockingOps.scala:83)
  4. at kafka.utils.NetworkClientBlockingOps$.blockingReady$extension(NetworkClientBlockingOps.scala:93)
  5. at kafka.server.ReplicaFetcherThread.sendRequest(ReplicaFetcherThread.scala:248)
  6. at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:238)
  7. at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:42)
  8. at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:118)
  9. at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:103)
  10. at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)

在经纪人之间交换领导权 b1 以及 b2 ,因为它们被关闭并再次启动,但是只有最后一个联机的分区完全控制主题—是所有分区的领导者,并且只有一个分区 insync ,即使另一个经纪人重新上线。
尝试清理所有数据,重置代理和zookeeper,但问题仍然存在。
为什么分区没有正确复制?

cunj1qz1

cunj1qz11#

看起来像是经纪人 b1 以及 b2 不能相互交谈,这表明存在与docker相关的网络问题(此类docker网络问题通常很常见)。
您需要共享更多信息以获得进一步帮助,例如 docker-compose.yml 文件以及 Dockerfile 你用它来创建你的图像。我还想知道为什么您为两个代理创建了不同的映像,通常您只需要一个kafka代理映像,然后只需从该映像启动多个容器(每个所需的代理一个)。

cuxqih21

cuxqih212#

我想出来了。网络出现了问题,正如michael g。诺尔说。
首先,我不再手动Map端口并使用 host 而不是网络。更容易管理。
其次,b1和b2的侦听器设置如下:

  1. listeners=PLAINTEXT://:9092

它们都没有指定ip,所以 0.0.0.0 默认情况下使用了,并且发生了碰撞,因为他们都在那里侦听,并将相同的连接信息推送到zookeeper。
最终配置: b1 以及
b2 docker-compose.yml 使用 host 网络:

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

listeners=PLAINTEXT://<s1_IP>:9092
``` b2 server.properties`-侦听器:

  1. listeners=PLAINTEXT://<s2_IP>:9092

现在一切正常,复制工作正常,甚至在代理重新启动时也是如此。可以正确地生成和使用数据。

展开查看全部

相关问题