体系结构
Apache Flink是分布式数据处理引擎,用于无界(DataStream)和有界(DataSet)数据流上的有状态计算,Flink被设计用于在所有常见集群环境中运行,以内存速度和任意规模执行计算。
有界数据和无界数据
任何类型的数据都是作为事件流生成,例如交易数据,机器日志数据,用户流量数据,这些数据都以流的形式生成。
数据可以作为一个游街数据和无界数据使用
无界数据
有开始,没有定义结束,必须连续处理数据流,时间摄入后必须理解处理,因为输入是无界的,任何时间都不会完成,所以不能等待所有输入数据都到达后处理。处理无界数据常常需要按照特定的顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
有界数据
有一个定义的开始和结束,在执行任何计算之前,可以通过摄取所有数据来处理有界流。因为有界数据总是可以排序的,所以处理数据的顺序不是必须。有界数据处理通常称为批处理。
Apache Flink擅长处理无界和有界数据集。对时间和状态的精确控制使Flink的运行时能够在无界流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生优异的性能。
Apache Flink擅长处理无界和有界数据集。对时间和状态的精确控制使Flink的运行时能够在无界流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生优异的性能。
部署应用
Apache Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink集成了所有常见的集群资源管理器,如Hadoop YARN、Apache Mesos和Kubernetes,但也可以设置为作为独立集群运行。
Flink被设计成能够很好地工作于前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,这些部署模式允许Flink以其惯用方式与每个资源管理器交互。
在部署Flink应用程序时,Flink根据应用程序配置的并行性自动识别所需的资源,并从资源管理器请求这些资源。在失败的情况下,Flink通过请求新资源替换失败的容器。提交或控制应用程序的所有通信都是通过REST调用进行的。这简化了Flink在许多环境中的集成。
运行规模
Flink被设计成在任何规模上运行有状态流应用程序。应用程序被并行化为可能有数千个任务,这些任务在集群中分布并并发执行。因此,应用程序可以利用几乎无限数量的cpu、主内存、磁盘和网络IO。而且,Flink很容易维护很大的应用状态。它的异步和增量检查点算法确保了对处理延迟的影响最小,同时保证了精确的一次状态一致性。
内存提高性能
有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,或者,如果状态大小超过可用内存,则在访问效率高的磁盘数据结构中维护。因此,任务通过访问本地(通常在内存中)状态执行所有计算,从而产生非常低的处理延迟。Flink通过周期性和异步地将本地状态检查点指向持久存储,从而确保在出现故障时的状态一致性为一次。
应用程序介绍
Streams
- Bounded and unbounded streams 有界和无界流
- Real-time and recorded streams 实时流和记录流:实时流生成并处理它。记录流,持久化到存储系统,之后处理
State
- Multiple State Primitives 多个状态::Flink为不同的数据结构(如原子值、列表或映射)提供状态原语。开发人员可以根据函数的访问模式选择最有效的状态原语。
- Pluggable State Backends: 可以将状态存储到内存或RocksDB(一种高效的嵌入式磁盘数据存储)中,包括自定义状态
- Exactly-once state consistency 精确语义保证:Flink的检查点和恢复算法保证了故障时应用程序状态的一致性。因此,失败是透明处理的,不会影响应用程序的正确性。
- Very Large State 大状态:Flink能够维护几个tb大小的应用程序状态,这是由于它的异步和增量检查点算法。
- Scalable Applications 可伸缩:Flink支持通过将状态重新分配给更多或更少的work来伸缩有状态应用程序
Time
- Event-time Mode 事件时间: 时间发生时间
- Watermark Support 水印时间: 权衡延迟数据的一种实现方式
- Late Data Handling 延迟数据处理
- Processing-time Mode: 处理时间 数据处理时间的支持,系统处理数据的时间