flink 扫盲

1 Flink简介

Flink是一个流式的分布式处理引擎,可以同时处理有界流和无界流,并可以运行在常见的集群环境中。

Flink常用的应用场景有:

(1) 事件驱动型应用

(2) 数据分析型应用

(3) 数据管道应用:将数据进行转换后再迁移到其他的存储系统

Flink 是一个针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。目前主要还是依靠开源社区的贡献而发展。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。再换句话说,Flink 会把所有任务当成流来处理,这也是其最大的特点。Flink 可以支持本地的快速迭代,以及一些环形的迭代任务。并且 Flink 可以定制化内存管理。

Flink架构

Flink的分布式执行主要分成两个重要进程:master和worker。当一个Flink程序执行时,其有多个进程参与该执行过程,如:

Job Manager

Task Manager

Job Client

下面的流程图显示了Flink程序的执行过程:


link应用程序需要首先提交到Job Client,Job Client把该Job提交到Job Manager,Job Manager为该Job分配资源及执行器,其会先分配需要的资源,当资源分配完成后,该任务会提交给每个Task Manager,其中一个接收该任务,该Task Manager初始化一个线程来执行。当该执行器就绪后,这个Task Manager向Job Manager持续上报该Job的变更状态。该Job有多种状态,如:启动,进行中,结束。当这个Job运行结束时,其结果会被发送回提交的client。

Task Manager

Task Manager是worker节点。每个Task Manager上面可用的task slots决定了任务的并行执行,这块和Storm基本类似。

一个Task Manager会把其内存平分到每个slot中,如一个Task Manager有四个slot,其会为每个分配25%的内存。每个slot中又会有多个线程。每个slot中的线程运行在同一JVM中,同一JVM中的任务共享TCP连接和心跳消息。

Job Client

用于接收用户提交的程序,并创建数据流,把该数据流提交给Job Manager。当程序执行完成后,job client把执行结果返回给用户

其转换数据流类似下面流程:

数据流直接从source通过map操作是不需要进行shuffle数据的,如果使用GroupBy操作,则Flink需要重根据其key进行重新分布以确保能得到正确的结果,如下:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容