Flink引擎介绍 | 青训营笔记

109 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第36天

Flink引擎介绍

Map-Reduce 中间结果需要落盘,性能较差

流式计算(实时性):监控、金融风控、实时推荐

批式计算:等到数据全到位再计算(小时/天为单位)

流式计算:水龙头,数据源无限流

Spark是批处理模式,后面又出现了Spark Streaming将批作业划分为很小时间间隔的n个作业(mini-batch),如10s,实现流式处理

  • everything is stream(unbounded and bounded):既可以处理流数据也可以处理批数据
  • Checkpoint 状态容错
  • Dataflow编程模型
  • 流批一体

Flink整体架构

JobManager:整个任务的协调工作

TaskManager:执行一个DataFlow Graph

代码 -> 逻辑的执行图DAG图 -> Client端提交给JM -> JM转化其变为可执行的物理图 -> JM将物理图的task分配给taskmanager

WordCount案例

Flink会尽可能将不同的operator链接在一起形成Task,每个Task可以在一个线程中执行,如Source和map可以chain在一起

每个slot在TM中是一个线程在执行,内存没有严格隔离,一个slot只能运行同一个task的subTask

client端抽象为一个graph,JM

流批一体

抖音中,实时统计一个短视频的播放量、点赞数(流式处理)

抖音中,按天统计创造者的创作信息(批处理)

如何实现流批一体

Flink对Stream的抽象,有界数据集也是一种数据流

SQL层,有边界和无边界的数据集处理

批和流都可以使用DataStream API开发

调度层Scheduler

  • 将作业的DAG转化为可以执行的Task

  • 调度模式

    • EAGER:申请所有资源(流处理)

      • keyBy根据hash值分发到不同结点
    • LAZY:最小调度一个task即可(批处理)

    • ALL_EDGES_BLOCKING模式:A1产出的数据需要经过落盘,再存在B1

    • ALL_EDGES_PIPELINE模式:A1的数据从内存直接传入B1,然后再释放该资源,12个结点相当于1个pipeline region

容错、恢复层

Shuffle Service,流批场景选择不同的Shuffle Service

  • 用来连接上下游数据交互的过程叫做Shuffle

  • 两种实现

    • 基于文件:批处理,容错性高
    • 基于Pipeline:流处理,低延迟高性能
  • 生命周期

    • 流作业Shuffle与Task绑定
    • 流作业Shuffle存储在内存
    • 流作业Shuffle和计算节点部署在一起,减少网络开销;批作业会有远端的Shuffle服务,保证安全性
  • Flink

    • Netty:既支持pipeline又支持blocking
    • Remote:

OLAP

交互式分析(OLAP)场景

高并发查询,秒级查询,极致处理性能

Flink如何支持OLAP

  • online业务,用户数据变更update MySQL,离线业务,通过binlog同步到Hive,一般是以天/小时为单位,再放到ClickHouse,进行Query
  • 通过HTAP,实现秒级处理