首页 > 编程语言 >Flink源码解析(六)——数据分区解析

Flink源码解析(六)——数据分区解析

时间:2023-11-23 19:00:24浏览次数:42  
标签:dataStream 下游 分区 Flink 源码 解析 数据

一、数据分区概念

对分布式计算引擎来说,数据分区的主要作用是将现环节的数据进行切分,交给下游位于不同物理节点上的Task计算。

二、Flink数据分区接口体系

1、顶层接口ChannelSelector

(1).setup()方法设置下游算子的通道数量。从该接口中可以看到,算子里的每一个分区器都知道下游通道数量。

(2).selectChannel()方法设置每条数据所属的下游具体通道。

(3).isBroadcast()方法判断是否向下游广播。

2、Flink数据分区抽象类实现StreamPartitioner

抽象类StreamPartitioner包含一个关键成员变量numberOfChannels,在具体数据分区实现类初始化时,需要设置成员变量numberOfChannels的值,代表下游通道数量。

3、Flink数据分区实现类

BroadcastPartitioner:将每条数据广播给下游所有分区。调用方法dataStream.broadcast();
CustomPartitionerWrapper:Flink应用人员自定义分区选择逻辑。调用方法dataStream.partitionCustom(partitioner,${key});
ForwardPartitioner:在同一个OperatorChain中上下游算子之间数据转发,实际上是数据是直接传递给下游的。调用方法dataStream.forward();
GlobalPartitioner:只会将数据输出到下游算子的第一个实例。调用方法dataStream.global();
KeyGroupStreamPartitioner:应用在KeyedStream上,后续随笔会着重解析key的分发过程。
RebalancePartitioner:轮询分配每条数据。调用方法dataStream.rebalance();
RescalePartitioner:先平均分配下游分区范围,再轮询分配每条数据。调用方法dataStream.rescale();
ShufflePartitioner:随机分配每条数据。调用方法dataStream.shuffle();

三、举例数据分区实现解析

1、CustomPartitionerWrapper解析:

(1).DataStream类下调用partitionCustom()方法,需要传入Partitioner和KeySelector实例入参。

 (2).Partitioner接口只需要自定义实现partition()方法,即根据KeySelector得到的key,计算出来一个自定义通道位置。

 (3).下图可知setConnectionType()方法根据用户自定义分区类实例生成一个PartitionTransformation虚拟转换。虚拟Transformation参考《Flink源码解析(三)——DataStream和Transformation解析》。

 2、RebalancePartitioner解析:

(1).下图可知RebalancePartitioner事先随机初始化一个下游通道位置,每来一条数据,目标通道位置+1事先轮询的过程。

3、ShufflePartitioner解析:

(1).下图可知ShufflePartitioner对每条数据随机生成一个0~numberOfChannels范围内的整数作为该数据的下游通道位置。

 

标签:dataStream,下游,分区,Flink,源码,解析,数据
From: https://www.cnblogs.com/GeQian-hq/p/17852161.html

相关文章

  • Handler 源码解析,从入门到几乎入门
    AndroidHandler源码解析在Android中,Handler是一种强大的机制,用于在不同的线程之间进行通信。通过Handler,你可以轻松地将任务从一个线程发送到另一个线程,通常用于在后台线程执行任务后更新UI。同时handler机制也是Android主线程运行的原理,了解了主线程的运行原理也就可以知道l......
  • CreateIndex API执行流程_milvus源码解析
    CreateIndexAPI执行流程源码解析milvus版本:v2.3.2整体架构:CreateIndex的数据流向:1.客户端sdk发出CreateIndexAPI请求。importnumpyasnpfrompymilvusimport(connections,FieldSchema,CollectionSchema,DataType,Collection,)num_entities,......
  • CreateIndex API执行流程_milvus源码解析
    CreateIndexAPI执行流程源码解析milvus版本:v2.3.2整体架构:CreateIndex的数据流向:1.客户端sdk发出CreateIndexAPI请求。importnumpyasnpfrompymilvusimport(connections,FieldSchema,CollectionSchema,DataType,Collection,)num_entities,......
  • 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
    本文整理自阿里云智能开源表存储负责人,FounderofPaimon,FlinkPMC成员李劲松在云栖大会开源大数据专场的分享。本篇内容主要分为四部分:数据分析架构演进介绍ApachePaimonFlink+Paimon流式湖仓流式湖仓Demo演示数据分析架构演进目前,数据分析架构正在从Hive到Lakehouse的演变......
  • 收银系统源码-线上商城篇,打通线下收银台,ERP进销存
    智慧新零售系统是一套线下线上打通一体化的saas收银系统。主要为零售行业提供多样化的线下收银、双端线上商城、erp进销存、精细化会员管理、50+营销插件、企微私域scrm等行业解决方案,帮助商户做数字化升级!今天我们重点聊一下线上商城功能。智慧新零售线上商城主要分为微信和支付宝......
  • 直播平台源码,vue图片中划框截取部分图片
    直播平台源码,vue图片中划框截取部分图片 <template> <div>  <el-dialogtitle="请在图片上画出需要新增故障的位置":visible.sync="dialogVisible"width="1270px":before-close="handleClose":close-on-click-modal="false":close......
  • 营销数智化解析第6期:用友BIP | CRM 销售自动化场景
    用友BIPCRM企业销售管理增效的绝佳选择业务赋能已成为新时代CRM数智化的特征!数智化CRM的服务边际在不断延伸,从核心的销售管理场景,向前延伸到营销场景,提升获客能力;向后延伸到客户服务场景,提升服务质量;向内延伸到集成多业务系统,重构/加强数据赋能业务的能力。用友BIP|CRM......
  • 微信小程序商店导航网站系统模板源码
    微信小程序商店导航网站系统源码是基于帝国cms开源程序开发的一款小程序二维码收录大全的导航系统。模板源码无任务限制,可以随便修改成喜欢的页面,有能力者可以二次开发。本小程序导航网站源码前端自适应手机WAP页面。适用范围:微信小程序导航网站、微信公众号导航网站、微......
  • obproxy 源码编译以及一些问题整理-暂未编译成功
    尝试自己编译下oceanbase的obproxy并记录下一些问题,目前是暂未编译成功,因为是openssl版本包的问题环境说明基于了RockyLinuxrelease8.8,同时obproxy使用了4.2.1版本的构建参考命令这个官方已经提供了,主要就是initdebug,makeshbuild.shinitshbuild.sh......
  • Java商城网站系统设计与实现(带源码)
    基于Java的商城网站系统设计与实现功能介绍平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、商品详情页、订单、用户中心模块。后台功能包括:总览、订单管理、商品管理、分类管理、标签管理......