【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.mfbz.cn/a/759987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【TB作品】智能台灯控制器,ATMEGA128单片机,Proteus仿真

题目 8 :智能台灯控制器 基于单片机设计智能台灯控制器,要求可以调节 LED 灯的亮度,实现定时开启与关闭, 根据光照自动开启与关闭功能。 具体要求如下: (1)通过 PWM 功能调节 LED 灯亮度&#x…

RabbitMQ-交换机的类型以及流程图练习-01

自己的飞书文档:‌‍‬‍‬‍​‍‬​⁠‍​​​‌⁠​​‬‍​​​‬‬‌​‌‌​​​​​​‍​‍​‌⁠‬​RabbitMQ的流程图和作业 - 飞书云文档 (feishu.cn) 作业 图片一张 画rabbit-mq 消息发…

Java 并发编程常见问题

1、线程状态它们之间是如何扭转的? 1、谈谈对于多线程的理解? 1、对于多核CPU,多线程可以提升CPU的利用率; 2、对于多IO操作的程序,多线程可以提升系统的整体性能及吞吐量; 3、使用多线程在一些场景下可…

前端笔记-day11

文章目录 01-空间-平移02-视距03-空间旋转Z轴04-空间旋转X轴05-空间旋转Y轴06-立体呈现07-案例-3D导航08-空间缩放10-动画实现步骤11-animation复合属性12-animation拆分写法13-案例-走马灯14-案例-精灵动画15-多组动画16-全民出游全民出游.htmlindex.css 01-空间-平移 <!D…

Linux随记(十)

一、升级harbor v2.6.4 --> harbor-offline-installer-v2.11.0-rc3 --> v2.9.4 – 随记 漏洞信息&#xff1a; CVE-2023-20902timing condition in Harbor 2.6.x and below, Harbor 2.7.2 and below, Harbor 2.8.2 and below, and Harbor 1.10.17 and below allows an…

逆变器--学习笔记(一)

并网&#xff1a; 逆变器中的“并网”指的是逆变器将其产生的交流电与电网同步&#xff0c;并输送到公共电网中。并网逆变器通常用于太阳能发电系统和其他分布式发电系统&#xff0c;将其产生的电能输送到电网供其他用户使用。 THD谐波失真总量: 逆变器的THD&#xff08;Tot…

如何玩单机版:QQ音速

前言 我是研究单机的老罗&#xff0c;今天教大家带来一款怀旧游戏QQ音速 的教程。根据我的文章&#xff0c;一步一步就可以玩了。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; QQ音速 搭建教程 此…

Node.js全栈指南:静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用&#xff0c;也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断&#xff0c;设置不同的 MIME 值&#xff0c;得以让我们的浏览器正正确地接收和显示不同的文…

还不知道工业以太网和现场总线区别???

工业以太网 工业以太网是一种专为工业环境设计的网络通信技术&#xff0c;它基于标准的以太网技术&#xff0c;但针对工业应用进行了优化。工业以太网能够适应高温、低温、防尘等恶劣工业环境&#xff0c;采用TCP/IP协议&#xff0c;与IEEE 802.3标准兼容&#xff0c;并在应用层…

【C++】string基本用法(常用接口介绍)

文章目录 一、string介绍二、string类对象的创建&#xff08;常见构造&#xff09;三、string类对象的容量操作1.size()和length()2.capacity()3.empty()4.clear()5.reserve()6.resize() 四、string类对象的遍历与访问1.operator[ ]2.正向迭代器begin()和end()3.反向迭代器rbeg…

分治精炼宝库-----快速排序运用(⌯꒪꒫꒪)੭

目录 一.基本概念: 一.颜色分类&#xff1a; 二.排序数组&#xff1a; 三.数组中的第k个最大元素&#xff1a; 解法一&#xff1a;快速选择算法 解法二&#xff1a;简单粗暴优先级队列 四.库存管理Ⅲ&#xff1a; 解法一&#xff1a;快速选择 解法二&#xff1a;简单粗…

linux ls文件排序

linux可以使用ls命令结合一些选项来按照文件大小对文件和目录进行排序。以下是一些常用的方法&#xff1a; 1、这里&#xff0c;-l 选项表示长格式输出&#xff08;包括文件权限、所有者、大小等&#xff09;&#xff0c;-S 选项表示按照文件大小排序&#xff0c;-h 选项表示以…

docker -run hello-world超时

主要原因就是尝试拉取库的时候没有从阿里云镜像里拉&#xff0c;所以设置一下就好了 这里使用的是ubuntu系统&#xff08;命令行下逐行敲就行了&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&quo…

MSPM0G3507——定时器例程讲解4——timx_timer_mode_periodic

以下示例以周期模式配置TimerG并切换LED。周期从500ms开始&#xff0c;每次切换减少50ms&#xff0c;直到周期为100ms&#xff0c;然后重复。设备在等待中断时保持待机模式 #include "ti_msp_dl_config.h"/* ((32KHz / (321)) * 0.5s) 45 - 1 495 due to N1 ticks …

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…

基于YOLOv9的PCB板缺陷检测

数据集 PCB缺陷检测&#xff0c;我们直接采用北京大学智能机器人开放实验室数据提供的数据集&#xff0c; 共六类缺陷 漏孔、鼠咬、开路、短路、杂散、杂铜 已经对数据进行了数据增强处理&#xff0c;同时按照YOLO格式配置好&#xff0c;数据内容如下 模型训练 ​ 采用YOLO…

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(构造器方法)

序言 前面几篇文章介绍了Spring中几种方式下Bean对象的实例化的过程&#xff0c;那如果之前的几种都不满足&#xff0c;按照Spring中正常Bean的实例化步骤&#xff0c;该如何创建这个Bean对象呢&#xff1f; 测试类 我们先创建几个debug中用到的栗子。 Person 以一个平平无…

文章浮现之单细胞VDJ的柱状图

应各位老师的需求复现一篇文章的中的某个图 具体复现图5的整个思路图&#xff0c;这里没有原始数据&#xff0c;所以我使用虚拟生产的metadata进行画图 不废话直接上代码&#xff0c;先上python的代码的结果图 import matplotlib.pyplot as plt import numpy as np# 数据&#…

Linux 交叉编译工具链格式 sqlite3编译示例

1、交叉编译工具链 1.1 定义 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发工具集&#xff0c;它允许开发者在一个平台上&#xff08;例如高性能的PC或服务器&#xff09;编译生成另一个平台&#xff08;例如嵌入式系统或不同的操作系统和硬件架构&#xff09…

spring boot初始化的几个总结

spring intializr File->New->Project 注意&#xff1a;Spring Initializer中 Java版本选择模块已经不支持1.8了。 Spring Boot 3.x要求 Java最低版本为17&#xff0c; 最新的SpringBoot版本已经要求Java22了 所以&#xff0c;你可以升级Java版本&#xff0c;使用Spri…