Flink Apache 是一个框架何分布式处理引擎,用于在无边界和有边界数据流上进行状态的计算
一、数据可以分为 无界 有界 流 进行处理。
1.无界流 有定义流的开始,但没有定义流的结束。会无休止地产生数据。因为这个特性,数据必须能持续处理。处理无界数据通常以特定顺序摄取时间,例如 事件发生的顺序,以便能够推断结果的完整性。
2.有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流通常也被称为批处理。
Flink的优势在于其:通过精确的时间控制和状态化能处理任何类型的无界流应用;有界流由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生出色的性能。
Flink是一个分布式系统,需要计算资源来执行应用程序。Flink集成了常见的资源管理器, 例如 Hadoop YARN、Apache Mesos和K8S,但同时也可独立集群运行。
periodic asynchronous, incremental snapshots
二、接下来介绍流处理应用的基本组件
1.流
数据流是流处理的基本要素,流有多种特性。根据其特性决定其处理方式和处理时间。 有界流 和 无界流,针对 无界流有对应的功能强大的特性, 针对 有界流 也有专用的高效算子。 实时 和 历史记录 的数据流, 所有数据以流的方式产生,但用户通常有2种截然不同的处理方式。在数据生成时进行实时计算,或是先将数据持久化到存储系统中 在进行批处理。
2.状态
只有单独事件进行转换操作的应用才不需要状态。 每个具有一定复杂性的流处理应用都是有状态的。运行基本逻辑的流处理应用需要一段时间内存储接收到的事件或中间结果,以供后续的某个事件点进行访问并进行处理。
Flink 提供许多状态管理的特性:
2.1 多种状态基础类型: 原子值(value) 、 列表(list) 、 映射(map)
2.2 插件化的State Backend : 负责管理应用程序状态, 在需要时进行checkpoint。 Flink支持多种State backend ,可将数据存储在 内存 或 RocksDB。 同样支持插件式的state backend自定义存储。
2.3 精准一次语义: chechpoint 和 故障恢复算法,保证在故障发生后应用状态的一致性。
2.4 超大数据量状态: Flink 利用其异步 及 增量式的checkpoint算法,存储TB级别的应用状态
2.5 可弹性伸缩的应用: Flink 能够通过更多或更少节点上对状态进行重新分布,支持状态应用的弹性横向伸缩
3.时间
事件总是在特定时间点发生,隐含条件是:大部分事件流都拥有其固有的时间语义。
常见的流计算都基于时间语义,例如窗口聚合、会话计算、模式检测、基于时间的jion。流处理的一个重要方面是如何衡量时间,即区分 时间时间(event-time ) 和 处理时间 (processing-time )
Flink提供丰富时间语义支持
时间时间模式: 事件本身自带的时间戳
Watermark模式: 衡量时间进展,也是一种平衡处理时延和完整性的灵活机制
迟到数据处理: 有多种处理选项供参考
处理时间模式: 由处理引擎的机器时钟触发计算,一般适用于低延迟要求同时能容忍近似结果的流处理应用
分层API
Flink 根据抽象层度分层,提供三种API。每一种API在简洁性和表达上有不同侧重点,并且针对不同的应用场景。
ProcessFuncation
DataStream API
SQL & Table API