Flink 开发一些代码
本文基于:Flink Java Demo
1.开发中开启WEB UI
1.添加依赖
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-runtime-web</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
2.创建带WEBUI的执行环境
// 创建带WEBUI的执行环境,一般用于本地测试,需要引入flink-runtime-web依赖
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
3.访问
2.设置任务的并行度
1.代码中配置
1.局部控制
在算子方法后使用setParallelism()
方法设置并行度
在idea运行,不指定并行度,默认就是本机的线程数
// 处理数据
SingleOutputStreamOperator<Tuple2<String, Integer>> wordToOne = socketDS
.flatMap((String s, Collector<Tuple2<String, Integer>> collector) -> {
// 按照空格切分单词
String[] words = s.split(" ");
for (String word : words) {
Tuple2<String, Integer> wordTuple2 = Tuple2.of(word, 1);
// 使用 Collector 向下游发送数据
collector.collect(wordTuple2);
}
})
.setParallelism(2) //设置并行度
.returns(Types.TUPLE(Types.STRING, Types.INT));
2.全局配置并行度
算子方法中配置的并行度优先级要高于
全局配置的并行度
// 创建带WEBUI的执行环境,一般用于本地测试,需要引入flink-runtime-web依赖
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
env.setParallelism(7); // 全局配置并行度
2.提交作业时指定并行度
并行度优先级:
算子指定 > env > 提交时指定 > flink-conf.yaml[parallelim.default]
1.在WEB UI中提交任务时设置并行度[略]
2.在命令行中提交任务时设置并行度
使用-p
参数指定即可。
3.算子链相关
1.局部控制
SingleOutputStreamOperator<Tuple2<String, Integer>> wordToOneMap = wordToOne
.map(word -> Tuple2.of(word, 1))
//.startNewChain() //从当前算子开始新链
.disableChaining() //禁用单个算子的算子链
.returns(Types.TUPLE(Types.STRING, Types.INT));
2.全局控制
// 创建带WEBUI的执行环境,一般用于本地测试,需要引入flink-runtime-web依赖
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
// 全局禁用 算子链
env.disableOperatorChaining();
4.任务槽相关
在Flink的 flink-conf.yaml
配置文件中,可以设置TaskManager的 slot 数量,默认是 1 个 slot。
taskmanager.numberOfTaskSlots: 8
需要注意的是,slot 目前仅仅用来隔离内存,不会涉及 CPU 的隔离。在具体应用时,可以将 slot数量配置为机器的 CPU核心数,尽量避免不同任务之间对 CPU的竞争。这也是开发环境默认并行度设为机器 CPU 数量的原因。
任务槽特点:
- 均分隔离内存,不隔离cpu资源
- 任务槽可以共享
- 同一个job中,不同算子的子任务 & 同时在运行的,才可以共享同一个slot
- 前提条件,属于同一个slot共享组,默认都是“default”
配置slot共享组
SingleOutputStreamOperator<Tuple2<String, Integer>> wordToOneMap = wordToOne
.map(word -> Tuple2.of(word, 1))
.slotSharingGroup("coreqi") //指定当前算子的共享组,未指定则默认为"default"
.returns(Types.TUPLE(Types.STRING, Types.INT));
slot 共享好处就是允许我们保存完整的作业管道。这样一来,即使某个TaskManager 出现故障宕机,其他节点也可以完全不受影响,作业的任务可以继续执行。
5.并行度与任务槽的关系
- 任务槽是一种静态的概念,表示最大的并发上限
- 并行度是一种动态的概念,表示实际运行中占用了几个
要求: 任务槽(slot)数量 >= job并行度(算子最大并行度),job才能运行
注意:如果是YARN模式,资源会动态申请。
申请的TaskManager数量 = job并行度 / 每个TaskManager的slot数量,向上取整。
例如 YARN Session模式下:开始情况下,每个TaskManager的slot数量配置为3,默认为0个TaskManager,0个slot
提交一个Job,并行度为10 - 10 / 3,向上取整,则会申请4个TaskManager
- 使用10个slot,剩余2个slot
作者:奇
出处:https://www.cnblogs.com/fanqisoft/p/17975629
版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!