您如何判断 Kafka Streams 应用何时处于 "running" 状态?

How can you tell when a Kafka Streams app is in the "running" state?

给定一个最近启动的 Kafka Streams 应用程序,如何才能可靠地确定它已达到 "RUNNING" 状态?这是在启动一个或多个流应用程序的测试程序的上下文中,需要等到它们 运行 才能提交测试消息。

我知道 .setStateListener 方法,但我想知道是否有一种方法可以从 外部 应用进程检测此状态。我认为它可能作为 jmx 指标公开,但我在 VisualVM 中找不到

状态侦听器方法是可行的方法。没有其他 out-of-the-box 方法可以实现您想要的。

也就是说,您可以执行以下操作:

  1. 在您的 Kafka Streams 应用程序中公开一个简单的 "health check"(或 "running yes/no check"),例如通过 REST 端点(使用您熟悉的任何 REST 工具)。
  2. 健康检查可以基于您已经知道的 Kafka Streams 的 built-in 状态侦听器。
  3. 然后,您的测试程序可以远程查询各种 Kafka Streams 应用程序的健康检查端点,以确定它们何时启动以及 运行。

当然,您可以使用其他方式来传达 Kafka Streams 应用程序的准备情况。 (1) 中的 REST 端点思想只是一个示例。

  • 您还可以让 Kafka Streams 应用程序将其就绪状态写入 Kafka 主题,您的测试程序将订阅该主题以确定所有应用程序何时就绪。
  • 另一种选择是在您的 Kafka Streams 应用程序中提供自定义 JMX 指标,您的测试程序随后可以访问该指标。