首页 > 其他分享 >Flink入门

Flink入门

时间:2024-04-03 14:56:01浏览次数:17  
标签:flink 入门 barrier Flink jar yarn application job

1. Flink架构

Flink的角色

  • Client:获取、转换、提交代码给jm.
  • JM:对job做任务调度,再对job进一步处理转换,然后分发给TM.
  • TM:数据处理.

部署模式

区别:集群的生命周期和资源的分配方法,代码的main方式在client执行还是JM执行。

  • session会话:启动一个集群保持会话,通过client提交作业给jm.资源共享适合小而多的job.
yarn-session.sh -d -nm test 
flink run -d -c com.wsl.test wc2.jar # core1 7777

  • per-job单作业:每个job启动一个集群,job完成集群关闭资源释放。需要资源调度框架yarn、k8s.
flink run -d -m yarn-cluster -c com.wsl.day00.base.test wc2.jar -ynm wc # < 1.0 
flink run -d -m yarn-cluster flink-1.13.0/examples/batch/WordCount.jar -input hdfs://master1:8020/input/wc.txt -output hdfs://master1:8020/output/result2 

flink run -d -t yarn-per-job -c com.wsl.day00.base.test wc2.jar # > 1.0 #flink1.17
flink run -d -Dyarn.application.name=flink1.17 -t yarn-per-job -c org.example.App flink1.17.jar

/data/module/flink-1.17.0/bin/flink run -d -t yarn-per-job  -Dyarn.application.name=waf_log  -c com.sevenxnetworks.Start   /data/jar/waf-log-jar-with-dependencies.jar

flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
/data/module/hadoop-3.2.4/bin/yarn application -list
yarn application -list 2>/dev/null | awk '{print $2}' | grep dpi | wc -l #任务名
yarn logs -applicationId application_1627612938926_0005 #查看任务的log

  • application应用:不在client上执行代码,直接提交到JM上执行,每个job启动一个JM.
flink run-application -t yarn-application -c xxx xxx.jar

2. 核心概念

Window分类

  • TimeWindow
  • CountWindow
  • SlidingPreocessing、TumblingProcessing、Session、Global

//按键分区(Keyed)相同的key会发送到同一并行子任务,每个Key都定义了一组窗口单独计算。
stream.keyBy(...)
      .window(...)

//非按键分区(Non-Keyed)并行度=1
stream.windowAll(...)       

聚合函数:

  • 全量聚合 apply() process()
  • 增量聚合 aggregate() reduce()
  • 富函数:侧输出流、运行时上下文可做状态编程、生命周期方法
  • Process函数:侧输出流、运行时上下文可做状态编程、生命周期、定时器

WaterMark

.assignTimestampsAndWatermarks(forBoundedOutOfOrderness(1))) :到达窗口结束时间触发当前计算,但不关闭窗口,以后每来一次迟到数据触发一次计算.
.allowedLateness(Time.seconds(3)) :当允许迟到时间过了才会真正关闭窗口。 
.getSideOutput(0) :窗口关闭了后又来了迟到数据,通过测输出流输出。

状态

  • Row State
  • Managed State
    • Keyed State
    • Operator State (BroadCastState))

状态后端

本地状态的管理

  • 默认的 HashMapStateBackend:TM的jvm里
  • 内嵌RocksDB EmbeddedRocksDBStateBackend:持久化到TM的本地数据目录里,序列化和反序列化

配置

  • flink-conf.yaml state.backend: hashmap
  • 代码里为每个job配置

checkpoint

定时存档,遇到故障从检查点读档恢复之前的状态。

  • 周期性触发保存:代码设置
  • 保存的时间点(barrier):当所有的task处理到同一数据后,将此时的状态保存下来做一次快照。

barrier

触发检查点保存的时间点

JM定时向TM发送指令,触发保持检查点(带检查点id),向source中插入一条barrier,source任务将自己的状态保存起来,做一次ckp,barrier继续向下游传递,之后source就可以继续读入新数据了,然后后面的算子任务继续做ckp。遇到keyby分区,barrier需要广播到每个并行度,所以这个下游算子会收到多个barrier,需要做执行“分界线对齐”操作,即需要等到所有并行分区的barrier都到齐,才可以开始状态的保存。

  • Barrier对齐:下游任务等到所有并行度的barrier到齐的过程中,barrier已经到的上游任务又收到了数据(这已经是下次的ckp):
    • 至少一次:直接计算。重新启动两次ckp之间的数据会重复计算。
    • 精准一次:两次ckp之间的数据不会直接计算,而且缓存起来。
  • Barrier不对齐:直接把数据和barrier缓存起来
    • 精准一次

端到端一致性

标签:flink,入门,barrier,Flink,jar,yarn,application,job
From: https://www.cnblogs.com/xiao-hua-sheng/p/18112696

相关文章

  • Flink源码
    1.源码编译flink-1.19jdk-1.8scala-2.12mvm-3.86自定义日志:注意修改8081端口,可能被占用;windows日志的路径命名不能包含:,要改名自定义jar-Dlog.file=./log/flink-tm-1.local.log-Dlog4j.configuration=./a_conf/log4j.properties-Dlog4j.configurationFile=./a_conf/l......
  • Spring Cloud微服务入门(二)
    微服务的技术栈服务治理:服务注册、发现、调用。负载均衡:高可用、集群部署。容错:避免雪崩、削峰、服务降级。消息总线:消息队列、异步通信,数据一致性。网关:校验路径、请求转发、服务集成。配置管理:统一配置管理,数据源配置、端口配置等。链路监控:监控资源利用、服务......
  • 【C++】入门知识
    1.命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的就是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。#include<iostre......
  • docker------docker入门
    ......
  • 入门 .NET Aspire: 使用 .NET 简化云原生应用开发
    入门.NETAspire:使用.NET简化云原生应用开发https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/经历多个版本之后,我们一直在朝着我们正在进行的理想目标之一取得进展。使.NET成为全球构建云原生应用......
  • vue3 快速入门系列 —— 基础
    vue3快速入门系列-基础前面我们已经用vue2和react做过开发了。从vue2升级到vue3成本较大,特别是较大的项目。所以许多公司对旧项目继续使用vue2,新项目则使用vue3。有些UI框架,比如antdesignvue1.x使用的vue2。但现在antdesignvue4.x都是基于vue3,示例默认是......
  • 开源模型应用落地-chatglm3-6b模型小试-入门篇(一)
      一、前言   刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。   在信息时代,我们可以轻松地通过互联网获取大量的理论知识和概念。然而,仅仅掌......
  • GIS入门,EPSG:3857介绍,纯JS如何实现简化得Web墨卡托投影的逆变换和高精度Web墨卡托投影
    EPSG:3857坐标系介绍EPSG:3857坐标系,也称为Web墨卡托投影(WebMercatorprojection),是一种用于Web地图的常见投影系统。它是由谷歌地图在2005年引入并广泛采用的。这个投影系统将地球表面的经纬度坐标转换为平面坐标,使得地图在Web上的显示更加方便和流畅。EPSG:3857坐标系使......
  • 手写数字图片识别——DL 入门案例
    DeepLearningDemoofPrimary下面介绍一个入门案例,如何使用TensorFlow和Keras构建一个CNN模型进行手写数字识别,以及如何使用该模型对自己的图像进行预测。尽管这是一个相对简单的任务,但它涵盖了深度学习基本流程,包括:数据准备模型构建模型训练模型预测输入:importtenso......
  • Java登陆第三十六天——VUE3响应式入门、setup语法糖
    当浏览器接收到服务端返回的页面后,浏览器会把页面解析成DOM树,DOM树中各个元素会相应的显示在浏览器上。VUE提供的响应式数据可以在页面不刷新的情况下更新数据。响应式数据App.vue<script>//等价于setup语法糖。固定的写法,不会改。exportdefault{setup(){letsum......