apache-spark - Spark Structured Streaming - 即使没有输入行也强制执行微批处理
问题描述
我们有一个 Spark Structured Streaming 查询,它计算过去一小时收到的输入行数,每分钟更新一次,使用时间窗口 ( windowDuration="1 hour"
, slideDuration="1 minute"
) 执行聚合。查询配置为使用 processingTime 触发器,持续时间为 30 secods trigger(processingTime="30 seconds")
。的outputMode
查询是append
。
只要接收到新行,此查询就会产生结果,这与文档为固定间隔微批次指示的行为一致:
如果没有新数据可用,则不会启动微批处理。
但是,即使没有输入行,我们也希望查询产生结果:我们的用例与监控相关,并且我们希望在监控系统中一段时间内没有输入消息时触发警报。
例如,对于以下输入:
事件时间 | event_id |
---|---|
00:02 | 1 |
00:05 | 2 |
01:00 | 3 |
03:00 | 4 |
在 processingTime=01:01,我们可以假设将产生以下输出行:
窗口.start | 窗口.end | 数数 |
---|---|---|
00:00 | 01:00 | 3 |
但是,从这一点开始,直到 03:00 之前都没有输入行,因此,直到此时才会执行任何微批处理,从而错过了生成输出行的机会,例如:
窗口.start | 窗口.end | 数数 |
---|---|---|
01:01 | 02:01 | 0 |
否则会在我们的系统中产生监控警报。
这种行为是否有任何解决方法,允许在没有输入行时执行空微批处理?
解决方案
你不能要求软件中没有提供的东西,也没有变通办法。甚至有一段时间,可能仍然存在,其中最后一组微批量数据没有被处理。
推荐阅读
- javascript - 无法在 jQuery DatePicker 中使用格式“yyy-dd-mm HH:MM:ss”来保存 MySQL DateTime 字段
- python - create a list of words with elements from a multi values column in python
- sql - 当前状态查询/架构
- javascript - 在用户输入时加载异步选项的 react-select 动态下拉列表
- python - Django - 创建一个随机页面选择器
- javascript - 使用 typeof 到 typeof 在 Javascript 中不起作用
- snowflake-cloud-data-platform - 雪花:如何找到对象依赖关系?
- neo4j - Cypher 合并查询创建新节点而不是合并
- android - Queue Ble Android 仅准时发送
- reactjs - 模块解析失败:意外的令牌?