Flink是一种基于事件驱动型、有状态的流批一体分布式计算引擎。
Flink将数据划分成有界流数据和无界流数据,以对应批处理和流处理计算。
Flink底层由Process Function构成,封装成DataStream API 和DataSet API对数据进行流、批计算。Flink还抽象除了Table API,将数据抽象成以表为中心进行计算。在Table API的基础上衍生出了Flink SQL,用户能方便的使用SQL进行开发。实际开发中,一般场景都可以使用Flink SQL完成开发,一些不好通过SQL实现的、复杂的场景使用DataStream/DataSet API完成开发。
Flink运行时角色主要有:
Client:解析用户的代码、获取执行资源参数,将计算逻辑构建成StreamGraph,将StreamGrap优化成JobGraph,提交给JobManager。进程级别
JobManager:作为任务管理协调中心。接收Client提交的JobGraph,负责任务的划分:将JobGraph细分为ExcutionGraph然后划分给TaskManger执行ExcutionGraph、资源管理、Checkpoint协调管理、故障转移、任务重试。进程级别
TaskManager:接收JobManger划分的Task,将Task交给其拥有的Slot执行、Checkpoint执行。进程级别
Slot:抽象化的任务处理资源单元,负责执行Task。线程级别。
Flink在流处理上时间上定义了三种时间语义:注入时间、系统时间、事件时间。
Flink引入并实现Watermark机制,用于处理数据滞后、乱序问题。
Flink 的Checkpoint机制用来故障恢复,并使用两阶段提交的方式实现恰好一次语义。