Kafka Streams 有类似 Accumulator 的 Spark 吗?

Is there a Spark like Accumulator for Kafka Streams?

Spark 有一个有用的 API 以线程安全的方式积累数据 https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.util.AccumulatorV2 and comes with some out-of-box useful accumulators e.g. for Longs https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.util.LongAccumulator

我通常使用累加器将调试、分析、监视和诊断连接到 Spark 作业中。我通常在 运行 Spark 作业之前触发 Future 以定期打印统计数据(例如 TPS、直方图、计数、计时等)

到目前为止,我找不到任何与 Kafka Streams 类似的东西。有什么存在吗?我想这至少对于 Kafka 应用程序的每个实例都是可能的,但是要跨多个实例进行这项工作需要创建一个中间主题。

Kafka Streams 通过设计避免并发——如果累积不需要容错,您可以在内存中完成并通过挂钟时间标点符号将其刷新。

如果需要容错,可以使用state store,在一个标点中扫描整个store,刷出。

这会给你任务级的积累。不确定 Spark 的累加器如何详细工作,但如果它给你一个 "global" 视图,我假设它需要通过网络发送数据,并且一个实例只能访问数据(或者可能是广播 - - 不确定,如何保证广播案例的一致性)。类似地,您可以将数据发送到一个主题(具有 1 个分区)以将所有数据全局收集到一个地方。