我有一个应用程序,它消耗所有用户活动作为流,例如,我想统计一下他看到主页的次数等等。我将计数具体化到一个持久的键值存储中。我想从其他应用程序访问此键值存储并从该存储中获取数据,因为我想通过其余端点共享这些统计信息。有可能吗?
答案 0 :(得分:2)
我想从其他应用程序访问此键值存储并从该存储中获取数据,因为我想通过其余端点共享这些统计信息。有可能吗?
是的,这是可能的。该功能在Kafka Streams中称为interactive queries。还有一个名为Kafka Music的演示应用程序,您可以以此为起点。
您的第一个应用程序使用Kafka Streams连续计算状态,并且还需要提供诸如REST / Thrift / ...之类的第二个应用程序可以查询的API。您的第二个应用程序可以是任何东西:它可以是Python应用程序,JavaScript应用程序,甚至可以是curl
之类的命令行工具-不必是另一个Kafka Streams应用程序。
您必须使用喜欢使用的任何REST工具等,手动实现第一个应用程序的“ API”,就像需要实现REST API的任何其他Java应用程序一样。通过上述interactive queries功能,Kafka Streams提供了所有必要的方法,可通过您自己的DIY API挖掘和公开Kafka Streams状态存储中的数据。 (Kafka Streams故意不提供“ REST API”或“ gRPC API”等本身,因为开发人员之间的需求通常大不相同。)
答案 1 :(得分:0)
您无法访问其他应用程序的状态存储。
您可以将汇总结果发送到主题,第二个应用程序将在该主题(aggregationResults
)上建立自己的状态存储
汇总应用程序:
builder.<String, String>stream("input")
.groupByKey(Grouped.with(Serdes.String(), Serdes.String()))
.windowedBy(TimeWindows.of(Duration.ofMinutes(5)).grace(ofSeconds(10)))
.aggregate(
() -> "",
((key, value, aggregate) -> "")
)
.suppress(Suppressed.untilWindowCloses(unbounded()))
.toStream().to("aggregationResults");