Apache Flink是一个分布式处理引擎框架,用于在无边界和有边界数据流上进行有状态的计算,实现数据流批一体化。能在常见的YARN、 Mesos、Kubernetes 在内的等多种资源管理框架集群/单机环境中灵活部署,并以高可用状态运行,以内存速度和任意规模进行高吞吐、低延迟、高性能的计算。其提供了Stateful Stream Processing、DataStream、Table &SQL API等多种不同级别的编程模式抽象以支持开发和运行多种不同种类场景的应用程序。另外Flink拥有精密的多状态管理、事件时间支持以及精确一次的状态一致性保障等使数据迭代计算过程中保证数据处理的稳定性与准确性。
Flink是一个在数据流上进行有状态的计算框架,常应用于实时流数据的分析计算以及实时数据与维表数据关联计算场景;同时可应用于实时数仓建设和ETL(提取-转换-加载)多存储系统之间进行数据转化和迁移;事件驱动型应用场景,即一类具有状态的应用,从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或根据自定义规则进行告警。
Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。整个系统主要是由两个组件组成,分别为JobManager和TaskManager,Flink架构也遵循MasterSlave架构设计原则,JobManager为Master节点,TaskManager为Worker(Slave)节点。所有组件间的通信都是借助与Akka Framework,包括任务的状态以及CheckPoint触发等信息。
JobManager:包含Flink Resource Manager、Flink Dispatcher、运行每个Flink Job的Flink JobMaster,是程序运行的主节点,用于协调任务分布式执行与资源调度、任务容错恢复等功能。
TaskManager:是任务执行节点,用来执行数据流任务或者子任务,缓存和交互数据流。
Slot:资源调度的最小单位,是一个静态概念,指Flink中TaskManager并发执行任务的能力。
State:有状态函数和运算符在各个元素(element)/事件(event)的处理过程中存储的数据。
CheckPoint:Flink实现容错机制最核心的功能,能够根据配置周期性地基于Stream中各个Operator/task的状态来生成快照,将这些状态数据定期持久化存储下来,用于程序异常时快速恢复,保证程序的状态执行。
Watermark:是一种衡量任务事件时间进展的机制,用来处理实时数据中的乱序问题,通常是Watermark和窗口结合使用来实现。