电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Flink状态的缩放与键组设计

13页
  • 卖家[上传人]:ji****81
  • 文档编号:265416955
  • 上传时间:2022-03-13
  • 文档格式:DOCX
  • 文档大小:1.12MB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、 Flink状态的缩放与键组设计 前言在之前那篇讲解Flink Timer的文章里,我曾经用三言两语简单解释了Key Group和KeyGroupRange的概念。实际上,Key Group是Flink状态机制中的一个重要设计,值得专门探究一下。本文先介绍Flink状态的理念,再经由状态主要是Keyed State的缩放(rescale)引出KeyGroup的细节。再认识Flink状态自从开始写关于Flink的东西以来,“状态”这个词被提过不下百次,却从来没有统一的定义。Flink官方博客中给出的一种定义如下:When it comes to stateful stream processing, state comprises of the information that an application or stream processing engine will remember across events and streams as more realtime (unbounded) and/or offline (bounded) data flow through th

      2、e system.根据这句话,状态就是流处理过程中需要“记住”的那些数据的快照。而这些数据既可以包括业务数据,也可以包括元数据(例如Kafka Consumer的offset)。以最常用也是最可靠的RocksDB状态后端为例,状态数据的流动可以抽象为3层,如下图所示。用户代码产生的状态实时地存储在本地文件中,并且随着Checkpoint的周期异步地同步到远端的可靠分布式文件系统(如HDFS)。这样就保证了100%本地性,各个Sub-Task只需要负责自己所属的那部分状态,不需要通过网络互相传输状态数据,也不需要频繁地读写HDFS,减少了开销。在Flink作业重启时,从HDFS取回状态数据到本地,即可恢复现场。我们已经知道Flink的状态分为两类:Keyed State和Operator State。前者与每个键相关联,后者与每个算子的并行实例(即Sub-Task)相关联。下面来看看Keyed State的缩放。Keyed State的缩放所谓缩放,在Flink中就是指改变算子的并行度。Flink是不支持动态改变并行度的,必须先停止作业,修改并行度之后再从Savepoint恢复。如果没有

      3、状态,那么不管scale-in还是scale-out都非常简单,只要做好数据流的重新分配就行,如下图的例子所示。可是如果考虑状态的话,就没有那么简单了:并行度改变之后,HDFS里的状态数据该按何种规则取回给新作业里的各个Sub-Task?下图示出了这种困局。按照最naive的思路考虑,Flink中的key是按照hash(key) % parallelism的规则分配到各个Sub-Task上去的,那么我们可以在缩放完成后,根据新分配的key集合从HDFS直接取回对应的Keyed State数据。下图示出并行度从3增加到4后,Keyed State中各个key的重新分配。在Checkpoint发生时,状态数据是顺序写入文件系统的。但从上图可以看出,从状态恢复时是随机读的,效率非常低下。并且缩放之后各Sub-Task处理的key有可能大多都不是缩放之前的那些key,无形中降低了本地性。为了解决这两个问题,在FLINK-3755对Keyed State专门引入了Key Group,下面具体看看。引入Key Group如果看官有仔细读Flink官方文档的话,可能对这个概念已经不陌生了,原话抄录如

      4、下:Keyed State is further organized into so-called Key Groups. Key Groups are the atomic unit by which Flink can redistribute Keyed State; there are exactly as many Key Groups as the defined maximum parallelism. During execution each parallel instance of a keyed operator works with the keys for one or more Key Groups.翻译一下,Key Group是Keyed State分配的原子单位,且Flink作业内Key Group的数量与最大并行度相同,也就是说Key Group的索引位于0, maxParallelism - 1的区间内。每个Sub-Task都会处理一个到多个Key Group,在源码中,以KeyGroupRange数据结构来表示。KeyGroupRange的逻辑相对

      5、简单,部分源码如下。注意startKeyGroup和endKeyGroup实际上指的是Key Group的索引,并且是闭区间。public class KeyGroupRange implements KeyGroupsList, Serializable private static final long serialVersionUID = 4869121477592070607L; public static final KeyGroupRange EMPTY_KEY_GROUP_RANGE = new KeyGroupRange(); private final int startKeyGroup; private final int endKeyGroup; private KeyGroupRange() this.startKeyGroup = 0; this.endKeyGroup = -1; public KeyGroupRange(int startKeyGroup, int endKeyGroup) this.startKeyGroup = startKeyGrou

      6、p; this.endKeyGroup = endKeyGroup; Override public boolean contains(int keyGroup) return keyGroup = startKeyGroup & keyGroup = endKeyGroup; public KeyGroupRange getIntersection(KeyGroupRange other) int start = Math.max(startKeyGroup, other.startKeyGroup); int end = Math.min(endKeyGroup, other.endKeyGroup); return start = end ? new KeyGroupRange(start, end) : EMPTY_KEY_GROUP_RANGE; public int getNumberOfKeyGroups() return 1 + endKeyGroup - startKeyGroup; public int getStartKeyGroup() return start

      7、KeyGroup; public int getEndKeyGroup() return endKeyGroup; Override public int getKeyGroupId(int idx) if (idx getNumberOfKeyGroups() throw new IndexOutOfBoundsException(Key group index out of bounds: + idx); return startKeyGroup + idx; public static KeyGroupRange of(int startKeyGroup, int endKeyGroup) return startKeyGroup = parallelism, Maximum parallelism must not be smaller than parallelism.); int start = (operatorIndex * maxParallelism + parallelism - 1) / parallelism); int end = (operatorIndex + 1) * maxParallelism - 1) / parallelism;

      《Flink状态的缩放与键组设计》由会员ji****81分享,可在线阅读,更多相关《Flink状态的缩放与键组设计》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.