当前流处理使用最广泛的还是 Flink、Spark Streaming,只是两者基于历史演进策略不同,实现的流处理细节也略有区别。
简介
Flink 基本是从头开始构建,引入了持久化状态,官方宣传也是 Stateful Computations over Data Streams
;Spark 则基于原有的批处理完善,提供了微批 (Micro-Batch) 的概念。
除了上述两者之外,还有新兴的 RisingWave、ksqlDB(Kafka)、Materialize 等一众流处理方案。很多 SQL 的解决方案是提供视图或者物化视图。
Materialize
Materialize 基于 Differential Dataflow、Timely Dataflow 实现,基本概念可以参考 Naiad: a timely dataflow system,最初定位是流处理数据库,不过当前定位为实时数据处理,常用场景包括风险识别、异常检测、告警、通用 AI 等。
从示例上看,Timely 实际上提供了一个编程框架,通过参数即可实现进程内并发、多进程并发。
状态保存
流处理系统是没有边界的,数据会一直输入,用户通过 SQL 查看实时结果。与此同时,流系统节点可能会出现计算出错、失败、扩容、缩容等,这就需要确保将算子的中间状态持久化,并在节点间转移恢复。
参考
- Nexmark 可以用于流式处理的标准测试集。
- Frank McSherry 是 Materialize 的首席科学家,其 Blog 中有很多不错的基本概念相关的介绍。