fox*_*gen 5 apache-kafka apache-kafka-streams
我有一些我想远程查询的Kafka Streams应用程序实例。
当前,所有实例都在指定的host:port对上进行侦听,并且每个实例都能够查询其自己的本地状态存储并通过REST服务传达这些值。
+------------------+ +------------------+ +------------------+
| | | | | |
| instance1:9191 | | instance2:9292 | | instance3:9393 |
| | | | | |
+------------------+ +------------------+ +------------------+
Run Code Online (Sandbox Code Playgroud)
我希望有一个单独的应用程序能够查询这些实例中的状态存储:
consumer group separate application
+---------------------------------------+ _____
| [instance1] [instance2] [instance3] | <~------- | app |
+---------------------------------------+ -----
Run Code Online (Sandbox Code Playgroud)
单独的应用程序将利用相同的逻辑StreamsMetadataState::getAllMetadataForStore来获取我的应用程序正在运行的实例的所有活动主机/端口对,通过REST服务运行远程查询,并将数据汇总到其自身的应用程序逻辑中。
但是,我很难实现这一点。由于主机/端口对似乎是通过使用者组协议进行通信的,因此看起来我需要实际实例化另一个Kafka Streams实例(即使用者组的另一个成员),以便利用远程交互式查询。
我的问题是:
validateRunning检查阻止了我这样做)似乎应该有一个获取状态存储元数据的静态方法,该方法将允许我们直接传递从构建器对象中提取的所有值。即
KafkaStreams::getMetaDataForStore(streamsConfig, storeName);
Run Code Online (Sandbox Code Playgroud)
- 是否可以找到应用程序的所有正在运行实例的主机/值对,而无需在同一使用者组中也运行本地Kafka Streams实例?(我强调运行,因为我不介意仅实例化Kafka Streams应用程序的虚拟实例来获取主机/端口元数据,但是有一个validateRunning检查阻止了我这样做)
为什么不向(第一个)Kafka Streams应用程序添加新的REST API方法,以将当前活动的主机/端口对公开给第二个应用程序?该应用实例当然将具有此信息。
然后,第二个应用程序(“单独的应用程序”)可以通过此REST方法查询任何(第一个)Kafka Streams应用程序实例,以发现所有正在运行的应用程序实例。在这里,您根本不需要KafkaStreams在第二个应用程序中运行虚拟实例。
- 以上设计是否存在问题(运行单独的应用程序以查询Kafka Streams应用程序的所有实例)?即也许我所谈论的行为不被支持,因为我在做的事情有我尚未考虑的后果?
往上看。没有什么可以阻止您向Kafka Streams应用程序的REST层添加更多方法的。毕竟,您的(第一个)应用程序使用Kafka Streams API的部分不必成为该应用程序的唯一部分。:-)我认为您的问题可能是您的思维有点“扎根”,即您必须通过Kafka Streams API 来完成应用程序中的所有操作,但事实并非如此。毕竟,Kafka Streams API背后的动机之一是让您将其与您希望在应用程序中利用的其他API和库混合使用。
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |