Flink基础介绍 | 青训营笔记

88 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第一天,因为自己本身对于项目二简易流计算系统的实现感兴趣,所以主要想对Flink这款主流的流批一体计算引擎以及Kafka消息队列做更详细的了解。

随着监控场景、金融风控、实施推荐等场景的出现,大数据的实时性的需求变得更为迫切。于是大数据计算的架构模式发生了变化-由批式计算转变为流式计算。

那么,

Why Flink?

1.  出于业务统一的考虑,对于批式数据和流式数据最好使用同一个计算引擎。

2.  实现了Exactly-once的计算语义,数据消费不多不少正好一次。

3.  通过Checkpoint的机制,实现了状态容错

4.  使用了Dateflow的编程模型,对于高级需求(如window等)的支持较为友好

image.png

因此,Flink成为国内主流的计算引擎。

对于一个Flink集群来说,主要包含两个核心组件

JobManager(JM)

具体分为三部分:

Dispatcher负责接收Client的作业

JobMaster负责job的整个生命周期

ResourceManager负责资源的管理和调度

TaskManager(TM)

TM主要负责Flink的作业进程。

不同TM之间会进行资源交换。

简单来说,JM就是工头(负责分发任务的),TM就是工人(真正干活的)

 

为什么Flink能做到“流批一体”

在Flink的世界里,万物皆为流。对于无边界的数据流,Flink可以按照时间切分成一个个有边界的数据集。所以Flink能够用一套统一的业务逻辑处理批式和流式的数据。

 

Shuffle:

在分布式计算中,用来连接上下游数据交互的过程就叫做Shuffle。

不同分区数据的通信会涉及到通信的成本,在未来的开发中需要注意到任务的合并,尽量避免无用的网络传输,shuffle等以减小本地通信的开销。