一个任务的子任务占据一个slot,不同任务可以占据同一个slot。


元组:

资料:

scala插件下载:http://plugins.jetbrains.com

flinkcdc 自动加载最新checkpoint启动_flink

flink的官方文档:https://flink.apache.org/zh/flink-architecture.html

flinkcdc 自动加载最新checkpoint启动_并行度_02

flnk是流式的处理,spark是批式的处理。

处理的架构:

flinkcdc 自动加载最新checkpoint启动_flink_03

flinkcdc 自动加载最新checkpoint启动_flink_04

---01---

flinkcdc 自动加载最新checkpoint启动_flink_05

oltp关系

基于事件实时的响应的,问题是数据量非常多的话数据库的压力会很大的。

flinkcdc 自动加载最新checkpoint启动_并行度_06

olap分析

演化还是基于事件的方式的。

flinkcdc 自动加载最新checkpoint启动_子任务_07

不是读取关系型数据库而是保存在本地的状态。

checkpoint检查点。

flinkcdc 自动加载最新checkpoint启动_并行度_08

flink解决了批和流的两套,合并为一套。

flinkcdc 自动加载最新checkpoint启动_flink_09

---

flink是事件的驱动的。

flinkcdc 自动加载最新checkpoint启动_flink_10

基于流的处理:

flinkcdc 自动加载最新checkpoint启动_flink_11

批处理是有界的流。

flink的分层api

flinkcdc 自动加载最新checkpoint启动_子任务_12

主要是中间层。

flinkcdc 自动加载最新checkpoint启动_flink_13

flinkcdc 自动加载最新checkpoint启动_并行度_14

flinkcdc 自动加载最新checkpoint启动_flink_15

---02---

开发环境写flink的代码。

代码实现一个简单的wordcount

代码:

flinkcdc 自动加载最新checkpoint启动_flink_16

flinkcdc 自动加载最新checkpoint启动_flink_17

关于flatMap:

map和flatmap:

flatmap的很牛逼的解释:

flatMap:http://dblab.xmu.edu.cn/blog/961-2/

DataSet是我们中间层的api:

flinkcdc 自动加载最新checkpoint启动_flink_18

这个过程flink是要做统一的管理的。

---03---

几个具体的语义:

flink是事件驱动的,在流式处理的时候才会有事件的概念。读取文件的每一行式一个事件。

第一步:

flinkcdc 自动加载最新checkpoint启动_flink_19

第二步:再来

flinkcdc 自动加载最新checkpoint启动_子任务_20

第三步:再来再次得到的式GroupDataSet

flinkcdc 自动加载最新checkpoint启动_flink_21

flinkcdc 自动加载最新checkpoint启动_flink_22

flinkcdc 自动加载最新checkpoint启动_并行度_23

---04---

注意之前是批处理的,现在是流处理的。

流处理的代码:

flinkcdc 自动加载最新checkpoint启动_flink_24

keyBy实际做的事情是和groupBy是一样的, keyBy是重分区的。flink需要外部的事件去驱动的。

启动参数:

flinkcdc 自动加载最新checkpoint启动_flink_25

一台机器多个线程,模拟分布式,序号是线程的编号,默认的并行度是cpu核心的数量:

flinkcdc 自动加载最新checkpoint启动_flink_26

我们是可以调整并行度的:

flinkcdc 自动加载最新checkpoint启动_子任务_27

再次运行,看到不是默认的4核心了。

flinkcdc 自动加载最新checkpoint启动_子任务_28

全局的并行度是8,实际上每一步都是可以单独配置并行度的。

flinkcdc 自动加载最新checkpoint启动_flink_29

两个并行度配置6个

flinkcdc 自动加载最新checkpoint启动_子任务_30

reblance 上游的任务和下游的任务的关系

flinkcdc 自动加载最新checkpoint启动_并行度_31

flinkcdc 自动加载最新checkpoint启动_flink_32

flinkcdc 自动加载最新checkpoint启动_子任务_33

---05---

我的版本是什么:

flinkcdc 自动加载最新checkpoint启动_flink_34

yarn是必须要有hadoop支持的版本的。

需要下载binaries

flinkcdc 自动加载最新checkpoint启动_子任务_35

flinkcdc 自动加载最新checkpoint启动_flink_36

需要hadoop支持的话:

flinkcdc 自动加载最新checkpoint启动_子任务_37

增加了hadoop

flinkcdc 自动加载最新checkpoint启动_并行度_38

用这个就可以了。

部署和提交,部署到集群环境里面去。

部署:flink的下载地址:http://archive.apache.org/dist/flink/

我的flink部署在哪里:

在实际的生产中用yarn是比较普遍的方式的,我们是standlone模式的。

怎么安装的自己要好好看下的。

flink的机器是133这个机器。

flinkcdc 自动加载最新checkpoint启动_并行度_39

在bin下面:

flinkcdc 自动加载最新checkpoint启动_子任务_40

yarn-session:创建yarn-session在yarn-session创建job和提交的。

配置文件:注意版本是1.10.0

flinkcdc 自动加载最新checkpoint启动_并行度_41

1.看下配置文件,在哪里启动集群,一个集群的job-manager就是一个的

flinkcdc 自动加载最新checkpoint启动_子任务_42

2.jobmanager和其他节点通信都是rpc的方式的,默认的是6123。

flinkcdc 自动加载最新checkpoint启动_子任务_43

3.第一个式jvm的堆大小,第二个是堆和堆外的大小

flinkcdc 自动加载最新checkpoint启动_并行度_44

实际是taskmanager是干活的要的资源要多的。jobmanager是调度的。

4.指的是一个taskmanageer可以提供多少个slots 一个slot就是用来执行任务的最小的单元 一个并行的任务不同的子任务必须执行再不同的taskSlot上。

flinkcdc 自动加载最新checkpoint启动_子任务_45

flinkcdc 自动加载最新checkpoint启动_并行度_46

5.默认的并行度,第一个是能力,第二个是我的执行力就是默认的,能力很大但是我可以不用。代码配置的优先级是最高的。

flinkcdc 自动加载最新checkpoint启动_flink_47

6.故障恢复的策略。

flinkcdc 自动加载最新checkpoint启动_子任务_48

7.访问的端口

flinkcdc 自动加载最新checkpoint启动_子任务_49

8.其它的配置 需要配置slaves文件去增加taskmanager

flinkcdc 自动加载最新checkpoint启动_子任务_50

如何启动呢?

flinkcdc 自动加载最新checkpoint启动_并行度_51

还有文件masters和slaves

flinkcdc 自动加载最新checkpoint启动_子任务_52

本地的机器即启动了JobManager也启动了taskManager。

参数的解读:192.168.244.133:8081

 

flinkcdc 自动加载最新checkpoint启动_并行度_53

这里:task Manager是1,配置文件一个task Manage提供1个slot。每个taskManager的taskSlot的数量就是节点的核心数量。

设置时间同步:

在哪里打包呢?

生成的jar包是带后缀的。

flinkcdc 自动加载最新checkpoint启动_并行度_54

flinkcdc 自动加载最新checkpoint启动_flink_55

并行度的优先级,从高到底:

1.代码最高单独配置最高

2.全局声明的环境第二

flinkcdc 自动加载最新checkpoint启动_并行度_56

3.

flinkcdc 自动加载最新checkpoint启动_子任务_57

flinkcdc 自动加载最新checkpoint启动_并行度_58

读取文本流是不能控制

同一个任务的并行子任务而言的,同一个任务的并行子任务是不可以分配到一个slot的,但是不同任务的并行子任务是可以的。

主要是因为i同一个任务的并行子任务可能会共享数据,这样是线程不安全的。

一般是一个slot对应的与一个cpu资源的。

4.flink的配置文件的

参数:com.atguigu.wc.StreamWordCount

 --host localhost --port 7777

flinkcdc 自动加载最新checkpoint启动_并行度_59

flinkcdc 自动加载最新checkpoint启动_flink_60

---

目前只有1个slot,被分配了。

flinkcdc 自动加载最新checkpoint启动_flink_61

这个指的是两个任务,并行度是1,每个子任务是共享的处理槽。

相同的key的hashcode是一样的,就会分配到同一个分区里面去。

flinkcdc 自动加载最新checkpoint启动_子任务_62

两个任务是可以用一个处理槽处理的。同一个任务的并行子任务必须分配到不同的slot。

另一种提交方式:

flinkcdc 自动加载最新checkpoint启动_并行度_63

其中p是并行度。

结束:

flinkcdc 自动加载最新checkpoint启动_并行度_64

提交方式还要再看的,先不看了。

---06---

前后执行的任务可以共享slot。

flinkcdc 自动加载最新checkpoint启动_子任务_65

slot就是定义好的最小的处理任务的单元。

flinkcdc 自动加载最新checkpoint启动_子任务_66

dispatch收到应用,启动jobManager,将应用提交给jobManager,jobManager分析应用,向resourcemanager去请求slot。

resourcemanager启动对应的taskManager。

flinkcdc 自动加载最新checkpoint启动_并行度_67

 

这里的resourceManager实际上是yarn的resourceManager。

客户端提交job给yarn的resourcemanager。

ApplicationMaster去加载HFDFS上的资源。

 

flinkcdc 自动加载最新checkpoint启动_并行度_68

flinkcdc 自动加载最新checkpoint启动_子任务_69

这个是5个任务,这5个任务并不需要都独立的占用一个taskSlot。

可以让不同的任务共享一个slot。

flinkcdc 自动加载最新checkpoint启动_子任务_70

一个TM有三个slot就是内存分为3份给每一个slot

slot之间内存是独享的,是隔离的。cpu不是独享的。slot数量配置为核心线程数,不会出现cpu轮转竞争资源的方式。

上面那个图有5个任务。

flinkcdc 自动加载最新checkpoint启动_并行度_71

并行度就是slot的个数,上图的并行度是6。一共是13个任务。

什么是任务?逻辑图是算子,物理图是任务。一个算子可以有多个任务的。一个任务占据一个处理槽。多个不同算子的任务可以共享有个处理槽。

13个任务,不同任务共享slot。

一个slot是可以包含完整的操作的步骤的,完整的管道是可以保留下来的。

 

flinkcdc 自动加载最新checkpoint启动_子任务_72

跨slot要序列化反序列化的。

一个程序需要的slot的数量就是整个流处理流程中那个最大的并行度。

flinkcdc 自动加载最新checkpoint启动_并行度_73

taskmanager是任务,一个slot是一个子任务。

flinkcdc 自动加载最新checkpoint启动_子任务_74

flinkcdc 自动加载最新checkpoint启动_并行度_75

flinkcdc 自动加载最新checkpoint启动_子任务_76

flinkcdc 自动加载最新checkpoint启动_并行度_77

并行度即使slot的数量。

flinkcdc 自动加载最新checkpoint启动_子任务_78

flinkcdc 自动加载最新checkpoint启动_并行度_79

---07---

任务链:

flinkcdc 自动加载最新checkpoint启动_并行度_80

看下并行度我们是如何定义的:

flinkcdc 自动加载最新checkpoint启动_并行度_81

这个按照并行度,我们分为了7个任务,这些任务是如何占用slot的呢?

图中几个圆圈就是几个任务,不一样的任务是可以共享slot的,可以只占用两个slot:

flinkcdc 自动加载最新checkpoint启动_子任务_82

flinkcdc 自动加载最新checkpoint启动_并行度_83

最后两个slot五个任务。

并行度相同还是窄依赖的可以合并的。

flinkcdc 自动加载最新checkpoint启动_flink_84

flinkcdc 自动加载最新checkpoint启动_flink_85

---08---