【Flink】Flink SQL

一、Flink 架构

Flink 架构 | Apache Flink

二、设置TaskManager、Slot和Parallelism

在Apache Flink中,设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南:

1. TaskManager 设置

TaskManager是Flink集群中负责执行作业的节点。关于TaskManager的设置,主要关注其数量和资源分配。

  1. TaskManager数量:根据集群规模和作业需求确定TaskManager的数量。例如,如果集群资源充足且作业并发度高,可以增加TaskManager的数量以提高处理能力。
  2. 资源分配:为每个TaskManager分配适当的内存和CPU资源。这取决于集群的硬件配置和作业的资源需求。确保为TaskManager分配足够的资源以确保作业可以高效运行。

2. Slot 设置

Slot是TaskManager上用于执行作业的资源单元。一个Slot可以并行运行一个作业的子任务。

  1. Slot数量:每个TaskManager上的Slot数量决定了该TaskManager可以并行运行的作业子任务数。Slot数量通常根据TaskManager的内存和CPU资源来确定。例如,如果TaskManager有2GB内存和1个CPU核心,并且每个Slot需要1GB内存和0.5个CPU核心,则该TaskManager可以设置2个Slot。
  2. 资源分配:每个Slot会分配到一定的内存和CPU资源。这些资源应该根据作业的需求和TaskManager的总资源进行合理分配。

3. Parallelism 设置

Parallelism决定了Flink作业的并行度,即作业可以并行执行的程度。

  1. 默认并行度:在Flink配置文件中,可以指定默认并行度(parallelism.default)。如果作业没有指定并行度,则使用默认并行度。
  2. 作业级并行度:在提交作业时,可以通过命令行参数(-p)或编程API(env.setParallelism())为整个作业设置并行度。这将作为作业的默认并行度,但可以被单个算子的并行度设置覆盖。
  3. 算子级并行度:在Flink程序中,可以为每个算子单独设置并行度。这可以通过在算子链的末尾调用setParallelism()方法来实现。算子级并行度的优先级高于作业级并行度和默认并行度。

4. 总结

  • 设置TaskManager的数量和资源分配以适应集群规模和作业需求。
  • 根据TaskManager的资源为每个TaskManager设置适当的Slot数量。
  • 根据作业的需求和集群的资源设置作业的默认并行度、作业级并行度和算子级并行度。

 5. 阿里云 实时计算Flink版 参数示例 


三、Flink SQL性能调优与配置

在使用Flink SQL进行数据处理时,性能调优是确保系统高效运行的关键。以下是一些常见的调优配置和策略,它们可以帮助您优化Flink SQL作业的性能。

1. 微批处理(Mini-Batch)

Flink SQL支持微批处理,通过组合多个小批次来减少任务调度的开销。当启用微批处理时,Flink会尝试将多个小批次合并成一个较大的批次进行处理。

# 启用微批处理
table.exec.mini-batch.enabled: 'true'
# 设置允许的最大延迟时间,超过该时间将不再等待更多数据而直接发送当前批次
table.exec.mini-batch.allow-latency: 2s

2. 算子链优化(Operator Chaining)

算子链优化是一种减少任务间数据传输开销的策略。通过将多个算子链接在一起,可以减少序列化和反序列化的开销,并提高数据传输的效率。

# 默认情况下,Flink会尝试自动进行算子链优化
# 如果需要禁用此功能,可以设置为false
pipeline.operator-chaining: 'false'

注意:通常建议保持算子链优化开启('true'),以获得更好的性能。

3. Hash Shuffle

在Flink中,Keyed Streams使用hash shuffle策略将数据分发到下游的并行任务。这有助于确保具有相同key的数据被发送到同一个下游任务,从而进行高效的聚合或连接操作。

对于Flink SQL中的sink,如果其接受的是Keyed Stream,并且需要确保数据的顺序性,可以使用FORCE关键字来强制使用hash shuffle。

# 强制使用hash shuffle
table.exec.sink.keyed-shuffle: FORCE

注意:在Flink SQL中,您通常不需要手动配置这个参数,因为Flink会根据作业的特性和需求自动选择合适的shuffle策略。

4. Hash Join

Hash Join是一种基于哈希表的连接算法,适用于等值连接场景。它通过将一个表的数据加载到哈希表中,然后扫描另一个表并与哈希表中的数据进行比较来实现连接。

在Flink SQL中,可以使用Hint(提示)来建议优化器使用Hash Join。但是,请注意,这只是一个建议,优化器可能会根据实际情况选择其他连接策略。

SELECT /*+ SHUFFLE_HASH(t1,t2) */ * FROM table1 t1 JOIN table2 t2 ON t1.key = t2.key

5. 设置Sink的并行度

Sink的并行度决定了数据写入外部系统时的并行度。可以根据外部系统的性能和Flink作业的需求来设置合适的并行度。

在Flink SQL中,可以通过DDL语句或API来设置Sink的并行度。以下是一个示例DDL语句:

CREATE TABLE sink_table (
... -- 定义表结构
) WITH (
... -- 其他配置选项
'sink.parallelism' = '4' -- 设置并行度为4
);

或者,在Flink作业提交时通过API来动态设置Sink的并行度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】致远互联FE协作办公平台——SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 致远互联FE协作办公平台是一个专注于协同管理软件领域的数智化运…

关于内存和外存文件不同字符集下占用空间大小问题

关于内存和外存不同字符集下文件占用空间大小问题 存储(外存)的文件中的字符: ASCII:每个字符占用1个字节,用来存储英文字符和常用标点符号。ISO-8859-1:每个字符占用1个字节,向下兼容ASCII。G…

DS18B20单总线数字温度传感器国产替代MY18E20 MY1820 MY18B20Z MY18B20L(一)

前言 DS18B20是全球第一个单总线数字温度传感器,推出时间已经超过30年,最早由美国达拉斯半导体公司推出,2001年1月,美信以25亿美元收购达拉斯半导体(Dallas Semiconductor),而美信在2021年8月被…

DM达梦数据库存储过程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

RDMA通信2:RDMA基本元素和组成 通信过程元素关系解析 视频教程

哈哈哈,今天我们把下面这张图理解了,我们的任务就完成了! 视频教程在这:1.2 RDMA基本元素和组成 通信过程元素关系解析_哔哩哔哩_bilibili 一、WQ和WQE 工作队列元素(work queue element,WQE):是软件下发给硬件的任务…

Apache Ranger 2.4.0 集成Hive 3.x(Kerbos)

一、解压tar包 tar zxvf ranger-2.4.0-hive-plugin.tar.gz 二、修改install.propertis POLICY_MGR_URLhttp://localhost:6080REPOSITORY_NAMEhive_repoCOMPONENT_INSTALL_DIR_NAME/BigData/run/hiveCUSTOM_USERhadoop 三、进行enable [roottv3-hadoop-01 ranger-2.4.0-hive…

什么是TOGAF架构框架的ADM方法?

ADM是架构开发方法( Architecture Development Method),为开发企业架构所要执行的各个步骤以及它们质检的关系进行详细的定义,它是TOGAF规范中最为核心的内容。 ADM的具体步骤: 预备阶段(Preliminary Phas…

STM32第十三课:DMA多通道采集光照烟雾

文章目录 需求一、DMA(直接存储器存取)二、实现流程1.时钟使能2.设置外设寄存器地址3.设置存储器地址4.设置要传输的数据量5.设置通道优先级6.设置传输方向7.使通道和ADC转换 三、数据处理四、需求实现总结 需求 通过DMA实现光照强度和烟雾浓度的多通道…

【SkiaSharp绘图13】SKCanvas方法详解(二)填充颜色、封装对象、高性能绘制、点(集)(多段)线、圆角矩形、Surface、沿路径绘制文字

文章目录 SKCanvas方法DrawColor 填充颜色DrawDrawable 绘制封装对象DrawImage 高性能绘制图像SKBitmap与SKImage对比DrawPicture 绘制图像SKPicture DrawPoint / DrawPoints 绘制点DrawRoundRect/DrawRoundRectDifference绘制圆角矩形DrawSurface 绘制SurfaceDrawTextOnPath沿…

List接口, ArrayList Vector LinkedList

Collection接口的子接口 子类Vector,ArrayList,LinkedList 1.元素的添加顺序和取出顺序一致,且可重复 2.每个元素都有其对应的顺序索引 方法 在index 1 的位置插入一个对象,list.add(1,list2)获取指定index位置的元素&#…

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学…

Android跨进程通信,binder传输数据过大导致客户端APP,Crash,异常捕获,监听异常的数值临界值,提前Hook拦截。

文章目录 Android跨进程通信,binder传输数据过大导致Crash,异常捕获,监听异常的数值临界值,提前Hook拦截。1.binder在做跨进程传输时,最大可以携带多少数据1.1有时候这个1m的崩溃系统捕获不到异常, 2.监测异…

志愿填报指南:为什么我强烈建议你报考计算机专业

首先恭喜2024届高考的同学们,你们已经通过了高考的考验,即将进入人生的新阶段——大学。 现在正是高考完填报志愿的时刻,Left听到身边朋友提到报考志愿的诸多问题: 志愿填报怎么填?我要报考什么专业?这个…

[Cloud Networking] OSPF

OSPF 开放式最短路径优先(Open Shortest Path First)是一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码和汇总、层次区域划分等优点。 1 OSPF Area 为了适应大型网络&#xff0…

可编程定时计数器8253/8254 - 8253入门

时钟-给设备打拍子 概述 在计算机系统中,为了使所有设备之间的通信井然有序,各通信设备间必须有统一的节奏,不能各干各的,这个节奏就被称为定时或时钟 时钟并不是计算机处理速度的衡量,而是一种使设备间相互配合而避…

Linux 磁盘挂载与分区

Linux 磁盘挂载与分区 vda1: 其中vd表示虚拟磁盘,a表示第一块磁盘,b表示第二块磁盘,1表示第一块磁盘的第一分区(显然两块磁盘都只有一个分区)图中可以看到,vda1磁盘只有一个分区,且全部挂载到根…

vue3使用vant4的列表vant-list点击进入详情自动滚动到对应位置,踩坑日记(一天半的踩坑经历)

1.路由添加keepAlive <!-- Vue3缓存组件&#xff0c;写法和Vue2不一样--><router-view v-slot"{ Component }"><keep-alive><component :is"Component" v-if"$route.meta.keepAlive"/></keep-alive><component…

如何在MySQL中按字符串中的数字排序

在管理数据库时&#xff0c;我们经常遇到需要按嵌入在字符串中的数字进行排序的情况。这在实际应用中尤为常见&#xff0c;比如文件名、代码版本号等字段中通常包含数字&#xff0c;而这些数字往往是排序的关键。本文将详细介绍如何在MySQL中利用正则表达式提取字符串中的数字并…

Java家教系统小程序APP公众号h5源码

让学习更高效&#xff0c;更便捷 &#x1f31f; 引言&#xff1a;家教新选择&#xff0c;小程序来助力 在快节奏的现代生活中&#xff0c;家长们越来越注重孩子的教育问题。然而&#xff0c;如何为孩子找到一位合适的家教老师&#xff0c;成为了许多家长头疼的问题。现在&…

谷歌个人号,20人连续封测14天所需设备该怎么解决?

现在&#xff0c;在Google Play上架应用&#xff0c;对于大部分开发者来说&#xff0c;真的是不小的挑战&#xff0c;因为目前谷歌上架政策越来越严格了。特别是从2023年11月13日起&#xff0c;新政策要求个人开发者账号的应用必须经过20个独立用户连续14天的封闭测试&#xff…