流计算应用场景:对实时产生的数据进行实时统计分析
Apache Flink 采用了基于操作符(Operator)的连续流模型,可以做到微秒级别的延迟
Flink 中最核心的数据结构是 Stream,它代表一个运行在多个分区上的并行流。
Stream 代表一个数据流而不是静态数据的集合。所以,它包含的数据是随着时间增长而变化的。在 Stream 上同样可以进行各种转换操作,而且 Stream 上的转换操作都是逐条进行的,即每当有新的数据进来,整个流程都会被执行并更新结果。
当一个 Flink 程序被执行的时候,它会被映射为Streaming Dataflow
在 Flink 中,程序天生是并行和分布式的。一个 Stream 可以包含多个分区,一个操作符可以被分成多个操作符子任务,每一个子任务是在不同的线程或者不同的机器节点中独立执行的。
Stream 在操作符之间传输数据的形式有两种:一对一和重新分布
Flink 的核心是 DataStream
在 DataSet 和 DataStream 之上,有更高层次的 Table API。Table API 和 Spark SQL 的思想类似,是关系型的 API,用户可以像操作 SQL 数据库表一样的操作数据
Table API 同样统一了 Flink 的批处理和流处理,目前还不完善
比对:
对于以下场景,你可以选择 Spark。
【1】数据量非常大而且逻辑复杂的批数据处理,并且对计算效率有较高要求(比如用大数据分析来构建推荐系统进行个性化推荐、广告定点投放等);
【2】基于历史数据的交互式查询,要求响应较快;
【3】基于实时数据流的数据处理,延迟性要求在在数百毫秒到数秒之间。
Flink适用于各种需要非常低延迟(微秒到毫秒级)的实时数据处理场景,比如实时日志报表分析。
窗口:
Spark 只支持基于时间的窗口操作(处理时间或者事件时间)
Flink对于窗口的支持远比Spark要好,这是它相比Spark最大的优点之一。它不仅支持基于时间的窗口(处理时间、事件时间和摄入时间),还支持基于数据数量的窗口。
此外,在窗口的形式上,Flink支持滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、全局窗口(Global Window)和会话窗口(Session Windows)。