Apache Flink是一个用于对无界和有界数据流进行有状态计算的框架。Flink在不同的抽象级别提供多个API,并为常见用例提供专用库。
流媒体应用程序的构建块
可以由流处理框架构建和执行应用程序类型由框架控制流,状态和时间的程度来定义.
流
流是流处理的基本方面.Flink可以处理任何类型的流
- 有界和无界流:流可以有界或者无界,及固定大小写的数据集,Flink具有处理无界流的复杂功能,但也有专门的运营商来有效地处理有界流。
- 实时和记录的流:所有数据都作为流生成.有两种方法可以处理数据.在生成时实时处理它或将流持久保存到存储系统(例如,文件系统或对象存储器),并在以后对其进行处理。Flink应用程序可以处理记录或实时流。
州
每个平凡的流应用程序都是有状态的,即只有对单个事件应用转换的应用程序才需要状态。运行基本业务逻辑的任何应用程序都需要记住事件或中间结果,以便在以后的时间点访问它们,例如在收到下一个事件时或在特定持续时间之后。
- 多状态基元:Flink为不同的数据结构庭桂状态基元,例如原子值,列表或映射.开发人员可以根据函数的访问模式选择最有效的状态原语。
- 可插拨状态后端:应用程序状态由可插拔状态后端管理和检查点。Flink具有不同的状态后端,可以在内存或RocksDB中存储状态,RocksDB是一种高效的嵌入式磁盘数据存储。也可以插入自定义状态后端。
- 完全一次的状态一致性:Flink的检查点和恢复算法可确保在发生故障时应用程序状态的一致性。因此,故障是透明处理的,不会影响应用程序的正确性。
- 非常大的状态:由于其异步和增量检查点算法,Flink能够维持几TB的应用程序状态。
- 可扩展的应用程序:Flink通过将状态重新分配给更多或更少的工作人员来支持有状态应用程序的扩展。
时间
时间是流媒体应用的另一个重要组成部分 大多数事件流都具有固有的时间语义,因为每个事件都是在特定时间点生成的。此外,许多常见的流计算基于时间,例如窗口聚合,会话化,模式检测和基于时间的连接。流处理的一个重要方面是应用程序如何测量时间,即事件时间和处理时间的差异。
Flink提供了一组丰富的与时间相关的功能.
- 事件时间模式:使用事件时间语义处理流的应用程序根据时间的时间戳计算结果.因此,无论是否处理记录的或实时的事件,事件时间处理.都允许准确和一致的结果.
- 水印支持:Flink使用水印来推断事件时间应用中的时间。水印也是一种灵活的机制,可以权衡结果的延迟和完整性。
- 延迟数据处理:当使用水印在事件时间模式下处理流时,可能会发生在所有相关事件到达之前已完成计算。这类事件被称为迟发事件。Flink具有多种处理延迟事件的选项,例如通过侧输出重新路由它们以及更新以前完成的结果。