Flink学习知识分享二(分布式运行时环境、执行流程图、Time、WaterMark)

1.Distributed Runtime Environment

1.1Tasks and Operator Chains

tasks:将一些操作符的一些任务连接到一起,放到一个任务中执行,这样的话减少线程间切换以及缓冲的开销,增加吞吐量降低延迟。

1.2Job Managers, Task Managers, Clients

每个都是JVM进程。

  • Clients:向job提交作业的客户端,当任务提交后可断开连接,保持连接能够收到返回结果。
  • Job Manager(Master):用于调度job,向Task Manager下发指令,做检查点以及故障恢复
  • Task Manager(Worker):真正用于执行task作业,并能够缓冲以及和其它Task Manager交换数据
1.3Task Slots and Resources

一个Task Manager(JVM进程)具有一个或多个Task Solt,Task Solts会均分Task Manager的内存,通过调整插槽数,用户可以定义任务之间是如何隔离的,同一个TM下不同的solt任务共享TCP连接以及心跳信息,还可以共享数据集以及数据结构,从而减少每个任务的开销。
Flink允许多个任务共享一个插槽,故一个插槽是能够容纳整个作业的管道。

  • 共享插槽的好处
     1、当插槽数和任务最高并行度设置一致时,即可不必要计算一个作业有多少个任务
     2、更好的利用资源
    
  • 使用建议:
    默认将插槽数和cpu的 core数保持一致,若是超线程 则设置为2倍
    
1.4State Backends

本身KV索引的数据结构就是取决于状态存储,可存储 内存、RockDB、FS。即保存状态的数据数据结构,还保存了状态的时间点快照,该快照是检查点的一部分,后续用于做数据恢复。

1.5 savePoint

用于做恢复执行,可以允许在不丢失任何任何状态的情况下去更新程序以及Flink集群。它是手动触发的,依赖于常规的检查点机制。定期通过快照去生成检查点,对于数据恢复时,只需要最新的一个完成的检查点即可以。可以通过命令行/Rest API创建和取消。

checkpoints

是由用户触发的,在更新检查点完成时不会自动的过期;

2.执行流程图

通过println(env.getExecutionPlan)可获取Flink作业的执行流程图

  • StreamGraph :根据用户编写的Stream API代码生成的最初的图,表示程序的拓扑结构
  • JobGraph:经StreamGraph 优化后生成的该图,并提交JobManager,优化点:Chain Operators,将多个操作放到一个任务中执行
  • ExecutionGraph:JobManager根据JobGrap生成该图,是最核心的数据结构
  • 物理执行图:根据ExecutionGraph对Job进行调度后,在每个TaskManager上部署的Task后形成的图。

3.Time

  • evnet time : 数据生成时间,应用更广泛,为了避免乱序以及延迟数据,flink引入 watermark概念
  • ingestion time: 数据摄入Flink集群的时间,多是用于提供预测的一些结果,相对稳定(只记录一次)
  • processing time:Flink实际处理数据的时间,不稳定(同一数据流经不同窗口,可能会存在不同的处理时间戳)
    设置方式:
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime)
    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)

4. watermark

watermark(t):断言所有<=t的event全部到达。
Flink为处理Event time引入的概念,实际上还是时间戳;有两种生成机制:Punctuated(间断性)、Periodic(周期性);当时间达到watermark时,即认为所有限定时间内的数据都到了(当数据延迟很高时会丢失数据)

4.1watermark两种生成机制对比
  • Periodic(周期性):按照一定时间间隔或者一定数据量产生watermark,(重要)生产中必须结合时间和积累的条数两个维度生成watermark,否则极端情况会出现很大的延迟性。(ExecutionConfig.setAutoWatermarkInterval(…))
  • Punctuated(间断性):一般是根据event自身决定是否产生watermark,(重要)生产中只有实时性要求非常高才会选择该方式生成watermark。(AssignerWithPunctuatedWatermarks)
4.2watermark预定义两种方式

参考文章:https://www.ververica.com/blog/watermarks-in-apache-flink-made-easy
基于时间升序(Assigners with ascending timestamps)、 基于延迟数据(Assigners allowing a fixed amount of lateness)

4.2watermark考量点
  • 1.第一个数据4到来之后,是否直接输出
  • 2.第一个数据2到来之后,是否继续等待?等待多久?还是直接输出
  • 3.如何合理的设定延迟时间(N)
  • 4.使用何种方式生产watermark(bounded-out-of-orderness、ProcessFunction )

如何处理:
常规数据(watermark时间=event时间):正常处理
延迟数据:窗口[start time, end time],最大的延迟时间(N),watermark = end time + N

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值