流/批/OLAP 一体的Flink引擎介绍|青训营笔记

77 阅读3分钟

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

1.Flink概述

1.1 Apache Flink 诞生背景

1.1.1 什么是大数据?

    大数据(Big Data): 指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
    价值化、海量化、快速化、多样化

1.1.2 大数据计算架构发展历史

史前阶段~2006:传统数仓、Oracle、单机、黑箱使用 ---> Hadoop:分布式,Map-Redeuce

--->Spark : 批处理、流处理、SQL高阶API、内存迭代计算 ---> Flink: 流计算、实时、更快、流批一体、Streaming/Batch SQL

1.1.3 为什么需要流失计算

大数据的实时性带来价值更大,如监控场景,金融风控,实时推荐......
因为实时性的要求,带来了大数据计算架构模式的变化:

批式计算: ----------->>>> 流式计算:(流批一体)

离线计算,非实时 ----------->>>> 实时计算

静态数据集 ----------->>>> 无限流、动态、无边界

小时/天等周期计算 ----------->>>> 7*24h持续运行

1.2 Flink为什么脱颖而出

1.2.1 流式计算框架对比

image.png

1.2.3 Why Flink

Flink

Exactly-Once:精确一次的计算语义

Checkpoint:状态容错

Dataflow编程模型、window等高阶需求支持友好

流批一体----NB一体

1.3 Apace Flink 开源生态

image.png

2.Flink整体架构

2.1 Flink 分层架构

1.SDK层:
主要有三类:SQL/Table、DataStream、Python;
2.执行引擎层(Runtime层):提供统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化为分布式环境下的Task,然后通过Shuffle传输数据
3.状态储存层:负责储存算子的状态信息;
4.资源调度层:目前Flink可以支持部署在多种环境。

2.2 Flink 总体架构

一个Flink集群,主要包含两个核心组件:
1.JobManager(JM):负责整个任务的协调工作包括:调度task、出发协调Task做Checkpoint、协调容错恢复等;
2.TaskManager(TM):负责执行一个DataFlowGraph的各个task以及data streams的buffer和数据交换。

2.3 Flink如何做到流批一体

2.3.1 Flink为什么需要做到流批一体

很多情况下,需要实时统计一些数据,如抖音的播放量,直播间人数;按天统计创作者的一些数据信息,如播放量,点赞数等等。
批、流两套系统,相同逻辑需要开发两遍;本身计算内容一直,但是是两套链路,相同逻辑需要运行两遍;两套系统,两台算子,两套UDF通常会产生误差。

2.3.2 Flink为什么可以做到流批一体

 批式计算是流失计算的特例,有界数据(批式数据)也是一种数据流、一种特殊的数据流;

Apace Flink主要从以下几个模块来做流批一体

 1.SQL层;

 2.DataStream API层统一,批和流都可以使用DataStream API 来开发;
 
 3.Scheduler 层架构统一,支持流批场景
 
 4.Failover Recovery 层架构统一,支持流批场景
 
 5.Shuffle Serivce层架构统一,流批场景选择不同的Shuffle Service。

目前所了解到的Flink大概就是这样,还有很多知识没有学到,后续会继续进行学习!