首页 > 解决方案 > Kafka 流窗口批处理

问题描述

来自 Spark Streaming 背景 - 掌握 Kafka 流。

我有一个从 Kafka 读取的简单 Spark Streaming 应用程序,

并返回该分钟内每个用户的最新事件

示例事件看起来像{"user": 1, "timestamp": "2018-05-18T16:56:30.754Z", "count": 3}, {"user": 1, "timestamp": "2018-05-22T16:56:39.754Z", "count": 4}

我对这在 Kafka Streams 中的工作方式很感兴趣,因为似乎每个事件都有一个输出 - 当我的用例是减少流量时。

从我目前的阅读来看,这似乎不是直截了当的,你必须使用处理器 api。

理想情况下,我想使用 DSL 而不是处理器 API,因为我刚刚开始查看 Kafka 流,但似乎我必须punctuate每隔 n 秒使用处理器 API 的方法从状态存储中读取?

我正在使用卡夫卡 0.11.0

标签: apache-kafka-streams

解决方案


在 DSL 级别,Kafka Streams 允许配置 KTable 缓存(默认启用)以减少下游负载。缓存是定期刷新的 LRU 缓存。因此,虽然缓存减少了下游负载,但它并不能保证每个窗口有多少输出。(参见https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html

如果您严格要求每个窗口只有一个输出,那么使用处理器 API 是正确的方法。


推荐阅读