ToB企服应用市场:ToB评测及商务社交产业平台

标题: Flink core知识点总结 [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2024-7-24 02:20
标题: Flink core知识点总结
写在前面

五月份,重新整理了flink的相干概念,这次终于从根本逻辑入手,对整个flink job的整体运行过程有了熟悉,不得不说,flink真的很强;
剩下对于窗口这部分概念后续看环境增补吧,感觉应该标题不大
6月份,夺取运用上flink,对于根本标题可以大概debug办理,干!!!
1. Flink并行度相干概念

参考毗连:Flink 架构
1.1 Task、subTask


用户代码:界说了Flink应用程序的举动
Task(任务):任务是Flink程序执行的最小单元。将用户代码中的算子进行切分,组成一个个Task,一种最常见的划分方式是根据是否shuffle。
subTask:子任务是并行执行的单元,它们可以在不同的线程大概不同的盘算节点上执行。是一个Task的实例,和Task关系可以类别类与对象。现实上,一个subTask默认环境下是一个线程执行的,但是现实上用户可以进行更改
1.2、subTask、Slot

参考链接:细粒度资源管理

TaskManager:是 Flink 中的一个组件,负责执行 Task,它是一个独立的 JVM 进程,运行在集群中的每个节点上。TaskManager 负责管理和执行一个或多个 slot。
Slot: TaskManager 中的资源分配单元,代表了肯定的盘算资源,比如 CPU 和内存。相比spark,可以把slot明白为更细粒度的资源管理,flink是以槽位为最小调治单元

1.3、Task、算子链

上下游算子,能否 chain在一起,放在一个 Task中,取决于如下 3个条件:

2. Flink分布式部署

参考毗连:Deployment

3. flink的核武器:状态

参考链接:有状态流处置惩罚
参考毗连:Working with State
注:其余的很多概念都是由于状态的产生而产生,状态如何记载==>Checkpoint机制;状态存储到那里==>状态后端;什么时间使用状态==>状态恢复策略;状态什么事扫除,扫除策略…==>状态的TTL
4. flink的Checkpoint

4.1 checkpoint的基本思想

参考毗连:Checkpoints
假定我们不使用Chandy-Lamport 算法(分布式快照算法)恢复状态,会导致如下标题;

标题:产生上述错误的根本原因是什么?办理方式的关键是?
做快照的时间,在某一瞬间,把所有算子的快照都存下来,这个无法实现,因为不同算子此时处置惩罚的数据不完全雷同,状态在各个算子之间是不同一的,使得快照不靠谱;因此关键需要保证的事存储的快照如何保证是颠末同一批数据的影响;
办理方式:如何拍照可以大概使得拍出逐一致性的状态?
方式一:将发生标题的算子,盘算的状态开始往后传,…好像也是一种办理方式,但是设计框架需要思量到通用性
方法二:到场拍照标记barrier,类似watermark,是一种stringrecord
通过barrier,加持“事务”特性,各人要么都处置惩罚完,要么都没处置惩罚完
注:从下图中,我们可以看到flink的Checkpoint在保证EOS的位置,固然,EOS思量的因素更多,后期会详细先容;
参考毗连:Flink Exactly-once 实现原明白析

4.2 Checkpoint的整体流程

参考毗连:Snapshotting Operator State
注:Checkpoint的整体流程(也是一个2PC协议过程),通过对Checkpoint的基本原理了解后,发现Checkpoint的整个流程真的顺其天然...
其他:

5. flink的EOS语义(容错机制)

核心:绝对的EOS不存在,任何方式都只能无限逼近
客观天下中,无法把时间顺序上错开的多个操作,真正绑定在一个原子操作中;
参考毗连:Flink Exactly-once 实现原明白析
参考毗连:【Flink】Exactly-Once的保证
5.1 EOS的核心点

EOS的核心要义来自于对checkpoint的明白;

5.2 sink端的容错机制

从本节可以看出,flink和kafka的使用精密相连,很多标题都是针对两者一起使用时进行辨析
**标题:kafka的幂等性和kafka不支持幂等写入的区别是?
数据重试位置1:kafka中发送消息的时间,通过标记每个消息的序列号new_sn = old_sn+1,broker接受到新的序列号才保存消息;是kafka内部从producer到broker的过程,producer.send(a)失败,重新发送,
数据重试位置2:相当于调用了两次producer.send(a),两次均成功发送,kafka认为这两条消息都是正常发送的;
注:kafka支持伪事务,开启事务,每次发送消息会标记消息为controllMessage,事务开始;下游消耗则者设置脏读级别,可以决定是否只读已经提交的事务的数据;

**标题2:mysql支持幂等写入,也支持事务写入(mysql会删除未提交的事务),两种使用上效果会有什么区别?
幂等写入,可以及时拿到结果;
事务写入,需要等一批处置惩罚完,再拿到结果;
第一阶段:预提交阶段

第二阶段:事务提交阶段

标题1:预提交事务的信息存储在那里?
预提交事务时间,【事务号ID,以及事务状态】可以通过flink管理大概第三方存储体系管理;
网上给出的资料一般都认为【预提交阶段在Checkpoint成功完成之后结束】,这种说法很明显在commit提交失败后,会丢失数据,通过存储状态ID、状态事务可以进行改进,现实代码中也是这样改进的;
标题2:两阶段提交过程是否还可能存在标题?
1、外部体系,可能不支持:重新毗连之后,根据一个txid来恢复(commit大概rollback)
2、超时,外部体系对前次事务的相干上下文信息已经销毁(包括事务号,以及事务中未提交的数据)
上述两种环境下可能丢数据;
标题3:两阶段提交过程是否可能造成数据重复?
boolean success = conn.commit()后,体系挂了;重启后,发现本次事务提交的状态为pending,再次conn.commit();
注:如果事务提交不遵循幂等性,则可能造成数据重复
3. 2PC(预写日志)
本质也是事务写入,
任何目的体系,都可通过这种方式实现EOS,核心过程和事务写入类似,只是数据是否先写入到外部体系,下面只给出表示图;

6. flink的重启策略

task级别的故障重启,是体系自动进行的,默认不进行重启,配置过程中思量重启次数、重启隔断、惩罚力度、…
参考链接:Task Failure Recovery
标题:当一个task故障,自动重启时,是否会将整个job的所有task重启?
与failover-strategy策略有关:
all:只要job发生一个task故障,就会导致整个job所有task重启;
region:job中发生一个task故障,只会重启一个故障所影响的task最小集(一般最小集是一个pipeline流水线)

cluster级别的失败重启(故障导致,人为),不会自动从之前的快照数据中恢复状态;如果需要从某个快照状态来恢复数据,则需要手动指定Savepoints;
标题:Checkpoint和Savepoint的区别?
在job运行过程中,除了固定周期自动的Checkpoint之外,还可以由人工下令来触发Checkpoint(这个场景中产生的快照数据就叫作Savepoint)
注:Checkpoint注意task级别的使用,Savepoint针对job级别的重启
参考毗连:Checkpoints 与 Savepoints
扩展资料

Flink - State 之 Kafka 写入 HBase

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4