热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink原理与实现:数据交换策略

数据交换策略数据交换策略(DataExchangeStrategy)定义了数据如何被分配到物理数据流图的Task中的。数据交换策略可以由执行引擎根据算




数据交换策略

数据交换策略(Data Exchange Strategy)定义了数据如何被分配到物理数据流图的 Task 中的。数据交换策略可以由执行引擎根据算子的语义自动选择,也可以由数据流程序显式施加。因此,我们简要回顾下常见的几种数据交换策略:


  1. Forward:该策略把数据从一个 Task 发送到另一个接收 Task。如果这两个 Task 位于同一台物理机上(通常用任务调度器保证),则该策略可以避免网络通信。
  2. Broadcast:该策略把数据发送到算子所有并行的 Task 上。因为该策略需要复制数据,并涉及网络通信,所以成本比较高。
  3. Key-Based:该策略把数据按照 Key 进行分区,并且保证具有相同 Key 的数据会被划分到相同的 Task 上。
  4. Random:该策略将数据项均匀地分配到 Task 中,以使负载均匀地分布在计算任务之间。
    图1 数据交换策略

分区转换

分区转换对应于数据交换策略。该操作定义了事件如何被分配到 Task。当使用 DataStream API 构建应用程序时,系统自动地选择数据分区策略,并依据操作语义和配置的并发度将数据路由到正确的 Task。有时有必要在应用程序层面控制分区策略,或者自定义分区器。例如,如果我们已经知道 DataStream 的并行分区的负载是倾斜的,我们可能希望重新平衡数据,以便均匀地分配后续操作符的计算负载。或者,应用程序逻辑要求执行的所有 Task 都接收相同的数据,又或者要求事件按照自定义的策略分布。在本节中,我们将展示用户可以操作的 DataStream 方法或者定义他们自己的方法。



注意:KeyBy() 和本节讨论的分区转换是不同的。本节讨论的转换都会产生一个 DataStream,而 KeyBy() 产生的是 KeyedStream,并可以在它上应用访问 Keyed-state 的转换。



Random

Random 数据交换策略通过 DataStream.shuffle() 实现。该方法按照均匀分配的原则,随机地将数据分配到下游算子的并行 Task 中。


Round-Robin

rebalance() 方法对输入流进行分区,以便以 Round-Robin 方式将事件均匀地分配到下下游 Task。


Rescale

rescale() 也以 Round-Robin 的方式分配数据,但是它只分配给下游 Task 的子集。本质上,当发送者和接收者的 Task 数量不同时,Rescale 策略提供了一种执行轻量级负载重新均衡的方式。如果接收者的 Task 数量是发送者的 Task 数量的倍数,则 Rescale 转换会更有效,反之亦然。

rebalance()rescale() 本质的不同在于 Task 的连接方式上。rebalance() 在所有发送 Task 和接收 Task 间创建通信通道,而 rescale() 仅仅创建从每个 Task 到下游算子的某些 Task 通信通道。
图2 Rebalance vs Rescale


Broadcast

broadcast() 复制输入数据流,为了将所有数据发送到下游算子的所有并行的 Task 上。


Global

globa() 发送所有输入数据流到下游算子的第一个并行 Task。该分区策略必须谨慎使用,因为将所有数据路由到同一个 Task 可能会影响应用程序性能。


Custom

当预定义的分区策略没有一个适合使用时,你可以使用 partitionCustom() 定义自己的策略。该方法接收一个 Partitioner 对象,该对象实现分区逻辑和在被分区流上的字段或键的位置。







推荐阅读
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • Linux线程的同步和互斥
    目录1、线程的互斥2、可重入VS线程安全3、线程的同步1、线程的互斥 ... [详细]
author-avatar
fhuwiop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有