Flink学习

117 阅读4分钟

一. 简介

      “Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架;Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。

注:在 flink 的世界观中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。(一个在模式执行的作业可能会产生增量更新(想想数据库中的插入(upsert)操作),而作业只在最后产生一个最终结果。)

二. 核心Api

  • DataStreamApi(无界,有界,实时)以及 DataSet API(有界,离线,批处理)
  • Table API
  • SQL

三. Flink 运行架构

  • 作业管理器(JobManager)
  • 资源管理器(ResourceManager)
  • 任务管理器(TaskManager)
  1. Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境

连通即可)。提交 Job 后,Client 可以结束进程(Streaming 的任务),也可以不

结束并等待结果返回。

  1. JobManager 主 要 负 责 调 度 Job 并 协 调 Task 做 checkpoint, 职 责 上 很 像

Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的

执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。

  1. TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个

Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自

己的上游建立 Netty 连接,接收数据并处理。

  1. subtask是Flink中任务执行最小单元

  2. Slot是Flink中资源计算隔离的单元,一个slot中可以运行多个subTask,这些subTask必须是来自同一个job的不同task的subtask;而一个 TaskManager 多个 slot 意味着更多的subtask 可以共享同一个 JVM image.png

四. 内容

  1. 执行图
  2. 并行度
  3. 任务链

五. 传统数据处理结构(实时性很好)--为什么使用Flink

image.png

  • 缺点:请求量太大, 处理不了大数据,联表查询代价太高

分析处理架构:

image.png

image.png

六. 流与批的世界观

  • 流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。
  • 批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点 七. Checkpoint原理剖析与应用实践

1.checkPoint理解

  • checkPoint是从source触发到下游所有节点完成的一次全局操作
  • state其实就是checkPoint所作的主要持久化备份的主要数据
  1. states分类
  • keyed state :只能应用于KeyedStream的函数与操作中,例如Keyed UDF,windows states;keyed states试衣镜分区/划分好的,每一个key只能属于某一个keyed state
  • operator state:每一个operator state都仅与一个operator的实例绑定
  • Managed state:由Flink管理的state,flink推荐使用Manage state
  1. statebackend分类
  • MemoryStateBackend,运行时存储在java heap
  • FsStateBackend,运行时存储在java heap;只有在checkpoint,才会将数据以文件格式持久化到远程存储上.
  • RocksDBStateBackend,借用了RocksDB(内存磁盘混合的LSM DB)对state进行存储

4.执行机制

  • 第一步,checkPoint Coordinator向所有的source节点trigger Check-point

image.png

  • 第二步,source节点向下游广播barrier,这个barrier就是实现Chandy-Lamp-ort分布式快照算法核心,下游的task只有收到所有input的barrier才会执行相应的CheckPont

image.png

  • 第三步,当task完成state备份后,会将备份的数据地址通知给Checkpoint coordinator

image.png

  • 第四步,下游的sink节点收集齐上游input的barrier之后,会执行本地快照

image.png

  • 第五步,sin节点在完成自己的checkpoint之后,会将state handle返回通知给coordinator

image.png

  • 第六步,当checkpoint coordinator收集齐所有task的state handle,就认为这一次的checkpoint全局完成了,再向持久化存储中备份一个Checkpoint meat文件

image.png 5.checkpont的exactly_once语义

  • 为了实现exactly_once语义,flink通过一个input buffer将在对齐阶段收到的数据缓存起来,等对齐完成之后在进行处理. 注:flink的checkpoint机制只能保证flink计算过程中可以做到exactly once,端到端的exactly once需要source和sink支持.

image.png

七. 详解Metrics原理和实战

1.什么是Metrics

  • 在Flink内部收集一些指标,通过这些指标,让开发人员更好的理解作业或者集群的状态. 七. Web-Ui
  • 指定上传jar路径: web.upload.dir: /test