大数据学习之Flink(一)
Flink的核心特性:
1、高吞吐,低延迟
2、结果的准确性,提供了事件时间和处理时间,对于乱序事件流仍然提供一致且准确地结果
3、精确一次(exactly-once)的状态一致性保证
4、可以连接到最常用的存储系统和分布式文件系统
5、高可用,本身高可用的设置,再加上从故障中快速恢复和动态扩展任务的能力,能够做到7*24小时全天候运行
6、能够更新应用程序代码并将作业迁移到不同的Flink集群,而不会丢失应用程序的状态
1、数据处理架构不同
spark是以批处理为根本的,并支持在批处理之上进行流计算 在本质上还是批处理(微批处理)
Flink是以流处理为根本(有界流,无界流)
2、数据模型和运行架构不同
数据模型:
Spark底层模型是弹性分布式数据集(RDD)Spark Streaming进行微批处理的底层模型是DStream,实际上还是一组组小批数据的RDD的集合
Flink计底层数据模型时数据流(DataFlow)以及实践Event序列
运行架构:
Spark做批处理计算,需要将任务对应的DAG划分阶段,一个完成经过shuffle阶段在进行下一阶段的计算
Flink是标准的流式执行模式,一个事件在一个节点上处理完成后发送给下一个节点进行处理
Flink部署模式:
会话模式(Session Mode)
单作业模式(Per-Job Mode)
应用模式(Application Mode)
它们的主要区别在于:集群的生命周期以及资源分配方式,以及应用的main方法到底执行在客户端还是JobManager
会话模式:先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业(注意:集群启动时所有的资源都已经确定了,所以所有提交的作业会竞争集群中的资源)
会话模式比较适合单个规模小。执行时间短的大量作业
单作业模式:为了更好的隔离资源 考虑为每个提交的作业启动一个集群
注意:Flink本身无法直接这样运行,所以单作业模式一般需要借助资源管理平台来启动集群
应用模式:无需使用客户端,直接把应用提交到JobManager上运行,为每一个提交的任务单独启动一个JobManager(也就是创建一个集群)这个JobManger只为了执行这一个应用而存在,执行结束之后JobManger也就关闭了
区别:应用模式和单作业模式 都是提交作业后再创建集群,单作业模式是通过客户端来提交的 客户端解析的每一个作业对应一个集群 二应用模式下直接由Jobmanger执行应用程序 并且即使包含多个作业也只创建一个集群
standlone模式
yarn模式
yarn模式就是把Flink应用提交给yarn上的Resourcemanager,yarn的Resourcemanager会向yarn的NodeManager申请容器,在这些容器上Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在Jobmanager上的作业所需要的slots的数量动态分配TaskManager资源
yarn模式下的部署模式:
yarn-session:会话模式 需要首先申请一个yarn会话
yarn-session.sh -d
-d:后台运行
-jm:配置JobManger所需要的内存
作业提交:
1)通过web UI提交作业
2)通过命令行提交作业
flink run -c 主类名 xxxxx.jar
per-job:单作业模式
提交作业的命令:flink run -d -t yarn-per-job -c 主类名 xxxx.jar 或者 flink run -m yarn-cluster -c 主类名 xxx.jar
查看或者取消作业的命令:
flink list -t yarn-per-job -Dyarn.application.id=application_xxxx
flink cancel -t yarn-per-job -Dyarn.application.id=application_xxxx
application:应用模式
提交作业的命令:flink run-application -t yarn-application -c 主类名 xxxxxx.jar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?