flink 架构介绍和flink作业部署方式及优化方向参数(一)

flink 和spark 的比较

flink

  • fink 支持轻量级分布式快照snapshot 实现容错
  • 支持带丰富事件、时间的窗口window 状态操作:time,session.count,data-driven
  • 程序自动优化,避免特定情况下shuffle,排序等代价操作,中间结果自动缓存优化
  • flink taskslot 中对内存进行隔离,cpu是共享的。
  • 自动反压,不需要配置
    spark
  • 流计算是基于微批处理的流处理,延迟较高
  • 算子上,spark 是算子是分为宽依赖和窄依赖,算子分组成stage,stage需要等上个stage完成才能执行下一个stage。flink 的会在一个节点处理完成后,会发送到下个节点立即处理,延迟更小。

flink 架构

在这里插入图片描述

  • client
    提交任务,优化代码逻辑,有效减轻jobmanager的任务
  • jobmanger(driver)
    包含ResourceManager,Dispatcher,JobMaster启动会启动一个web服务器,web Frontend前端。
  • taskmanger(work)
    一个work就是一个taskmanager ,上有多个taskslot 就是JVM 进程,运行多个task线程。每个 taskmanager只对内存进行隔离,cpu不进行隔离。
  • TaskSlot (executor)
    jobmanager 是以taskslot 调度task 任务的,一般配置成机器的核数,taskslot代表并发任务数,多个操作也可以在一个tasklot中执行(操作链)。
  • 通信组件
    akka actor
    akka.ask.timeout=10s 默认值
  • blob 服务器
    接收客户端jar,发送给taskmanager,传输log等作用

通信netty

技术栈
在这里插入图片描述

部署模式

standalone cluster 和伪分布模式
./bin/start-cluster.sh 启动flink集群
./bin/stop-cluster.sh 关闭flink集群
yarn 集群模式
运行方式有四种

  1. flink yarn-session + flink run
    在yarn 集群中启动一个flink 会话,这个会话可以提交多个job上,所以的job占用功能的资源
    ./bin/yarn-session.sh -n 4 -jm 1024 -tm 4096 #n是 taskslot 数量,jm 内存大小,tm 内存大小
    ./bin/flink run ./examples/batch/WordCount.jar 会提交到yarn session上

  2. flink run yarn-cluster
    在yarn上启动单独的任务资源隔离,各个任务之间资源隔离
    ./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar

  3. flink run yarn-client
    在client 提交的节点上生成,会与jobmanager交互信息
    ./bin/flink run -m yarn-client -yn 2 ./examples/batch/WordCount.jar

  4. flink run-application
    /bin/flink run-application -t yarn-application ./examples/batch/WordCount.jar
    main方法预处理在jobmanager执行

参数优化

并行度设置

注意
实际申请的taskmanager和container的数量不等于预先参数配置的数量,最终由-p决定。
在这里插入图片描述

#./bin/flink run -p 3 -yn 3 -yjm 2048 -ys 2 -ytm 1024 -m yarn-cluster -c DataStreamingTest /home/master/conf/Flink8Test.jar
yarn 上 3个container,一个container是AM和jobmanager,另外2个container是taskmanager,cup3个,内存 2048+2*1024=4GB 
Flink上 分配2个taskmanager,taskslot 是4个,最大并行度3,空闲的slot 是1#./bin/flink run -p 4 -yn 3 -yjm 2048 -ys 2 -ytm 1024 -m yarn-cluster -c DataStreamingTest /home/master/conf/Flink8Test.jar 
yarn 上 3个container,一个container是AM和jobmanager,另外2个container是taskmanager,cup3个 Flink上 分配2个taskmanager,taskslot 是4个,最大并行度4,空闲的slot 是0个
官方建议 taskmanager.numberOfTaskSlots配置的Slot数量和CPU相等或成比例 
# 如何提高container的cup核数 
每个taskmanger是共享cup和io等资源,内存是隔离的 
yarn.containers.vcores -1
taskmanager.numberOfTaskSlots

优化方向

  • 设置并行度
    p参数,只能同时运行的taskslot的并行度数量
    操作算子层面(Operator Level)
    执行环境层面(Execution Environment Level)
    客户端层面(Client Level)
    系统层面(System Level)
  • 自定义分区
    rebanlance
    rescale
    shuffle
    broadcast
  • 网络通信
    通信网络,直接影响交换数据的速度和任务执行的效率
  • 其他方式
    设置不同服务器之间缓冲区超时时长,-1表示直到满才刷新,0表示一旦接收立即刷新env.setBufferTimeout(timeoutMillis)
    尽量少用并行度低的算子,WindowAll,count
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值