Flink学习笔记(尚GG-Java版本)

一、为什么选择Flink

        Apache Flink 是一个框架和分布式处理引擎,用于对无界和有解数据流进行状态计算,其具有高吞吐、低延迟、结果准确、语义化窗口、易用的API和高容错的特点

        ETL 是企业数据应用过程中的一个数据流(pipeline)的控制技术,把原始的数据经过一定的处理,放入数据仓库里(提取 Extract;转换 transform;加载 Load提取 Extract;

Flink的主要特点

        ① 事件驱动(Event-driven)

        ② 基于流的世界观

                在flink的世界观中,一切都是由流组成的,离线数据是有界的流(有界流);实时数据是一个没有界限的流(无界流);

        ③ 分层API

                越顶层越抽象,表达含义越简明,使用越方便

                越底层越具体,表达能力越丰富,使用越灵活

         ④ 支持事件时间和处理时间语义

        ⑤ 精准一次的状态一致性保证

        ⑥ 低延迟,每秒处理数百万个事件,毫秒级延迟

        ⑦ 与众多常用存储系统的连接

        ⑧ 高可用,动态扩展,实现7 * 24小时的全天候运行

 Flink Vs Spark Streaming 

        ① Flink 是流处理,Spark是微批处理

        ② 数据模型

                -Spark 采用RDD模型,Spark Streaming 的DStream实际上就是一组组小数据RRD的集合

                -Flink基本数据模型是数据流,以及事件序列

        ③ 运行时构架

                -Spark是批计算,将DAG划分位不同的stage,一个完成后才可以计算下一个

                -Flink是标准的流执行模式,一个事件在一个节点处理完后才可以直接发往下一个节点进行处理

二、Flink运行时的组件

JobManage

        · 控制一个应用进程的主进程,即每个应用程序都会被一个不同的JobManager所控制执行

        · JobManager会先接收到要执行的应用程序,这个应用程序包括:作业图(JobGraph)、逻辑数据流图(logic dataflow graph)和打包的所有的类、库和其他资源的jar包

        · JobManager会把JobGraph转换成一个物理层面的数据流图(执行图 ExecutionGraph),其包含了所有可以并发执行的任务

        · JobManager会向资源管理器(ResourceManager)请求执行任务的必要资源,也就是TaskManager上面的插槽(slot);一旦它获取到足够的资源,就会将执行图分发到真正运行它们的TaskManager上;在运行过程中,JobManager会负责所有需要中央协调的操作,比如检查点(checkpoint)的协调

TaskManager

        · 干活的人,Flink中的工作进程;通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含一定数量的slot;slot的数量限制了TaskManager能够执行的任务的数量

        · 启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或者多个slot提供给JobManager调用;JobManager就可以向slot分配task来执行了;

        · 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据

ResourceManager

        · 主要负责管理TaskManager的slot,slot是Flink中定义的处理资源单元

        · Flink为不同的环境和资源管理工具提供不同的ResourceManager,比如YARN、Mesos、K8s,以及standalone部署

        · 当JobManager申请插槽资源时,ResourceManager会将有空闲slot的TaskManager分配给JobManager。如果ResourceManager没有足够的slot来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器

Dispatcher

        · 可以跨作业运行,它为应用提交提供了REST接口

        · 当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager

        · Dispatcher也会启动一个Web UI来展示和监控作业的执行信息

        · Dispatcher在架构中不是必须的,取决于应用提交的运行方式

任务提交流程

 并行度

        一个特定算子的子任务(subtask)的个数称为其并行度(parallelism);一般情况下,一个stream的并行度,可以认为就是其所有算子中最大的并行度

TaskManager和Slots

        · slot:执行一个独立任务所需要资源的最小单元

        ·Flink中每一个TaskManager都是一个JVM进程,它可能会在独立的线程上执行一个或多个子任务

        · 为了控制一个TaskManager能接收多少个task,TaskManager通过task slot拉进行控制(一个TaskManager至少有一个slot)

        · 默认情况下,Flink 允许子任务共享slot,即使它们是不同任务的子任务;这样的结果是,一个slot可以保存作业的整个管道

        · Task slot是静态的概念,是指TaskManager具有的并发执行能力

程序与数据流(DataFlow)

        所有的Flink程序都是由三部分组成的:Source、Transformation和sink

        Source负责读取数据源,Transformation利用各种算子进行处理加工,Sink负责输出

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值