apache-kafka-streams - 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
解决方案
在 DSL 级别,Kafka Streams 允许配置 KTable 缓存(默认启用)以减少下游负载。缓存是定期刷新的 LRU 缓存。因此,虽然缓存减少了下游负载,但它并不能保证每个窗口有多少输出。(参见https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html)
如果您严格要求每个窗口只有一个输出,那么使用处理器 API 是正确的方法。
推荐阅读
- eclipse - 在eclipse中将其他项目作为依赖项
- wordpress - CURL 不在 post 字段 xml 中发送数字值,字符工作正常,但不是数字
- python - 根据另一列结果(这是一个字符串)对数据框列的元素求和
- java - 循环时应用 DRY,每个函数都有微小的变化
- java - javax.servlet.request.X509Certificate 属性返回 null
- python - 如何在Shapely中提取没有数组的几何对象的坐标
- ios - App Store 上传因推送权利问题而被拒绝
- java - 不遍历实现 Iterable 的类
- c++ - 如果构造函数是在类外部定义的,为什么我们不使用这个关键字?
- groovy - 在指定长度后拆分字符串,但不要使用 groovy 分词