Kafka streams.allMetadata()在DOCKER(交互式查询)中返回空列表



我有一个简单的kafka流应用程序,它利用交互式查询并使用RESTfull进行实例通信。

该应用程序在具有多个流实例的docker之外运行良好。流#allMetadata((返回所有正在运行的实例的正确列表。然而,一旦我在docker中运行应用程序,流#allMetadata((的结果就是一个空数组[]。

注意:在docker中运行时,除了其他实例的可发现性之外,其他一切都正常。[我可以与不同的流实例交互,并可以获得它们存储的数据]

我已经看了其他有同样问题的帖子,但我的其他帖子似乎有点不同

  • 我在所有实例中都有相同的APPLICATION_ID
  • 卡夫卡和任何一个实例之间的通信都是有效的。并且Streams工作正常[意味着BOOTSTRAP_SERVERS_CONFIG配置正确]
  • 数据正确存储在所有实例上,我可以通过每个实例的IP直接与每个实例交互[意味着APPLICATION_SERVER_CONFIG在每个实例上都正确配置]
  • 我运行的是同一版本的Kafka和Streams v1.1.0
  • 我尝试了融合和landoop Kafka docker图像,结果相同

我这里缺少什么?

我发现了问题并解决了它。

该问题是由我的流媒体应用程序docker基本映像中缺少库[ld-linux-x86-64.so.2]引起的,该库由RocksDB的一个依赖项[librocksdbjni8077190960714261011.so]使用(见图!(。

解决方案是只使用另一个具有上述库的基本映像,所以我将流媒体应用程序的基本映像从openjdk:8-jdk-alpine更改为anapsix/alpine-java:latest,现在一切正常。

注意:当我出现上述问题时,我注意到了另一个症状。我的流媒体应用程序偶尔会失去与卡夫卡经纪人的连接。我偶尔会在日志上看到一条关于"无法访问代理节点…"的消息。这个问题在上面的修复后消失了。我不知道它们是如何相互关联的。

最新更新