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

时间:2018-07-16 19:11:22

标签: docker apache-kafka apache-kafka-streams

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

该应用程序在具有多个流实例的Docker外部运行良好。并且streams#allMetadata()返回所有正在运行的实例的正确列表。但是,一旦我在docker中运行该应用程序,streams#allMetadata()的结果将是一个空数组[]。

注意:在docker中运行时,除其他实例的可发现性之外,其他所有功能均有效。 [我可以与不同的流实例进行交互,并获取它们存储的数据]

我已经在这里查看过其他相同问题的文章,但是我的似乎有点不同other posts

  • 在所有情况下我都拥有相同的APPLICATION_ID
  • Kafka与任何单个实例之间的通信正常。并且Streams正常工作[意味着BOOTSTRAP_SERVERS_CONFIG配置正确]
  • 数据已正确存储在所有实例上,我可以通过其IP直接与每个实例进行交互[这意味着APPLICATION_SERVER_CONFIG在每个实例上均已正确配置]
  • 我正在运行相同版本的Kafka和Streams v1.1.0。
  • 我尝试了融合和Landoop Kafka docker镜像,结果相同。

我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

我找到了问题并解决了。

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

解决方案是仅使用具有上述库的另一个基础图像,因此我将流应用程序的基础图像从openjdk:8-jdk-alpine更改为anapsix/alpine-java:latest,现在一切正常。

注意:遇到上述问题时,我注意到了另一种症状。我的流媒体应用偶尔会失去与kafka经纪人的连接。我会时不时地在日志中看到一条有关“无法到达代理节点...”的消息。上述修复后,此问题消失了。我不知道它们之间的关系。