flink框架优势
在分布式计算框架中,需要处理分散在多台机器上的海量数据,对于大数据开发人员面临最大的挑战就是代码的编写、部署、调度、容错等。Flink在实时计算方面,提供流一个抽象的集即DataStream / DataSet,开发者只要调用统一的编程API,传入具体的计算逻辑,不必太多关心底层的细节,就可以完成各种复杂的计算了,并且可以实现快速部署、资源调度、任务容错等,大大的提高了开发效率。
编程模型
需要创建任务运行环境 StreamExecutionEnvironment,后续所有的计算拓扑都是需要基于这个环境来添加变换的。
有了环境之后就需要有需要计算的数据集合了: 调用相应的Source算子创建原始的DataStream,Source算子可以支持有限数据源(文件,数据库表),也可以支持无限数据源(kafka,session ,mq)。
之后就可以对数据源读到的数据一条一条的做转换清洗了: 调用零到多次Transformation(转换算子),每调用一次Transformation都会生成一个新的DataStream。 这些转换包含(map,reduce,window,etc.)。
最后将转换好的数据落盘:调用Sink算子创建需要写入的地方(外部存储,标准输出等)。
上面的过程结束后程序就形成一个Data Flow Graph(数据流图)。
由于flink是懒加载的一个框架, 我们还需要调用刚开始创建的运行环境StreamExecutionEnvironment的execute方法,这样启动之后就会把这个数据流图提交给JobManager,经过优化后生成包含有具体计算逻辑的Task实例,然后调度到TaskManager的slot中开始计算。