当前位置: 首页 > article >正文

Flink SQL SavePoint最佳实践

以下是 Flink SQL Savepoint 最佳实践,涵盖配置、触发、恢复及注意事项,高效管理作业状态:


一、Savepoint 的配置与触发

1. 基础配置

  • 存储路径:在 flink-conf.yaml 中全局设置 Savepoint 存储目录,避免每次手动指定路径:
    state.savepoints.dir: hdfs:///flink/savepoints
    
  • 检查点模式:优先选择 EXACTLY_ONCE 语义保障数据一致性:
    SET 'execution.checkpointing.mode' = 'EXACTLY_ONCE';
    SET 'execution.checkpointing.interval' = '5min';  -- 建议与业务容忍延迟匹配
    
  • 并行度与状态后端:根据作业规模选择 RocksDB(大状态)或 FsStateBackend(小状态):
    SET 'parallelism.default' = 4;
    SET 'state.backend' = 'rocksdb';
    

2. 触发 Savepoint

  • 命令行触发:通过 Flink CLI 手动触发(需指定 JobID):
    ./bin/flink savepoint <job-id> [target-directory]
    
  • SQL 客户端触发:在 SQL 作业停止时自动触发 Savepoint:
    STOP JOB '<job-id>' WITH SAVEPOINT;
    
  • 编程触发:通过 REST API 或调度工具(如 Airflow)自动化触发流程。

二、Savepoint 的恢复与容错

1. 恢复作业

  • 从指定路径恢复
    ./bin/flink run -s hdfs:///savepoints/savepoint-xxxx <jar-file>
    
  • SQL 客户端恢复:在启动作业前设置 Savepoint 路径:
    SET 'execution.savepoint.path' = 'hdfs:///savepoints/savepoint-xxxx';
    START JOB '<new-job-id>';  -- 提交新作业后重置路径
    RESET 'execution.savepoint.path';  -- 避免影响后续作业
    
  • 处理状态不匹配:若作业逻辑变更导致状态无法映射,添加 --allowNonRestoredState 跳过无效状态。

2. 版本兼容性

  • Flink 版本升级:确保新旧版本状态格式兼容(参考 Flink 官方兼容性文档)。
  • 作业逻辑变更:若修改算子 UID 或拓扑结构,需验证 Savepoint 恢复可行性(优先保留旧算子 UID)。

三、维护与管理

1. 定期清理

  • 删除过期 Savepoint 以释放存储空间:
    ./bin/flink savepoint -d hdfs:///savepoints/savepoint-xxxx
    
  • 配置自动化清理策略(如保留最近 3 个 Savepoint)。

2. 监控与验证

  • 状态一致性检查:通过 Flink Web UI 或日志确认 Savepoint 生成成功。
  • 恢复测试:定期从 Savepoint 恢复测试作业,确保关键业务流程不受影响。

四、针对 SQL 作业的特殊优化

1. 元数据管理

  • 使用 Catalog(如 Hive Catalog)持久化表定义和元数据,避免恢复时表结构丢失。
  • 示例:
    CREATE CATALOG hive WITH ('type' = 'hive', 'hive-conf-dir' = '/path/to/hive-conf');
    USE CATALOG hive;
    

2. 外部系统协同

  • 事务性 Sink:选择支持事务的 Connector(如 Kafka、JDBC),确保端到端 Exactly-Once。
  • 偏移量对齐:对于 Kafka 等 Source,启用 group.idauto.offset.reset 策略,避免数据重复或丢失。

五、典型场景示例

场景:升级 Flink 版本

  1. 触发当前作业的 Savepoint:
    ./bin/flink savepoint <job-id>
    
  2. 停止原作业并部署新版本 Flink 集群。
  3. 从 Savepoint 恢复作业:
    ./bin/flink run -s hdfs:///savepoints/savepoint-xxxx -c <main-class> <new-jar>
    
  4. 验证数据一致性及性能指标。

注意事项

  • 算子 UID手动指定 SQL 算子的 UID,避免自动生成 ID 因代码变更导致恢复失败。
  • 增量 Checkpoint:对于超大状态作业,启用 RocksDB 增量 Checkpoint 减少存储开销。
  • 网络与存储优化:确保 Savepoint 目录的 IO 带宽充足,避免生成/恢复超时。

通过上述实践,可显著提升 Flink SQL 作业的可靠性和运维效率。建议结合具体业务场景调整参数策略。

相关文章:

Flink SQL SavePoint最佳实践

以下是 Flink SQL Savepoint 最佳实践&#xff0c;涵盖配置、触发、恢复及注意事项&#xff0c;高效管理作业状态&#xff1a; 一、Savepoint 的配置与触发 1. 基础配置 存储路径&#xff1a;在 flink-conf.yaml 中全局设置 Savepoint 存储目录&#xff0c;避免每次手动指定路…...

【STM32】在FreeRTOS下使用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)

问题 STM32中在Freertos使用SPI通讯芯片 WK2124进行SPI转4串口时&#xff0c;接收数据为一个任务&#xff0c;发送数据为一个任务&#xff0c;切接受任务优先级更高实测发现收发一段时间&#xff08;约几分钟&#xff09;外扩芯片会死锁导致WK2124复位。 分析 首先&#xff…...

关于香橙派OrangePi 5 Ultra 这个开源板子,开发Android

我下载了它资料中的开源Android13 系统SDK&#xff0c; 这个SDK连个git 都没有&#xff0c;把这种代码释放能称为开源吗&#xff1f;&#xff1f; 并且也就是说你买了这个板子&#xff0c;里面是没有任何关于RK3588的开发文档&#xff0c;如果你没玩过其他RK平台&#xff0c;估…...

ubuntu启动 Google Chrome 时默认使用中文界面,设置一个永久的启动方式

方法 &#xff1a;通过桌面快捷方式设置 编辑 Chrome 的桌面快捷方式&#xff1a; 找到您的 Google Chrome 快捷方式文件。如果是通过菜单启动&#xff0c;通常会在以下路径找到与 Chrome 相关的 .desktop 文件&#xff1a; sudo vim /usr/share/applications/google-chrome.d…...

字节跳动开源 Godel-Rescheduler:适用于云原生系统的全局最优重调度框架

背景 在云原生调度中&#xff0c;一次调度往往无法解决所有问题&#xff0c;需要配合重调度来优化资源分配和任务摆放。传统的重调度框架主要集中在识别异常节点或任务&#xff0c;并通过迁移或删除来解决。然而&#xff0c;这些框架往往只能解决局部问题&#xff0c;无法提供…...

WINUI——Background小结

在 ​​WinUI/UWP XAML​​ 中&#xff0c;Background&#xff08;或其他颜色属性&#xff09;支持 ​​多种颜色表示方式​​&#xff0c;包括以下三种主流格式&#xff1a; ​​1. RGB 十六进制&#xff08;不透明&#xff09;​​ ​​格式​​&#xff1a;#RRGGBB​​特点…...

Oracle数据库数据编程SQL<01. 课外关注:数据库查重方法全面详解>

查重是数据库管理和数据分析中的常见需求&#xff0c;以下是各种查重方法的全面总结&#xff0c;涵盖不同场景和技术手段。 更多Oracle学习内容请查看&#xff1a;Oracle保姆级超详细系列教程_Tyler先森的博客-CSDN博客 目录 一、基础SQL查重方法 1. 使用GROUP BY和HAVING …...

开源技术如何助力中小企业实现财务管理自主化?

中小企业的数字化困境与开源机遇 国际数据公司&#xff08;IDC&#xff09;研究显示&#xff0c;全球67%的中小企业因高昂的软件成本和僵化的功能设计&#xff0c;未能有效推进数字化转型。传统商业软件常面临三大矛盾&#xff1a; 功能冗余与核心需求缺失&#xff1a;标准化系…...

边缘计算与隐私计算的融合:构建数据经济的“隐形护盾“

在数据成为核心生产要素的今天&#xff0c;边缘计算与隐私计算的交汇正在重塑技术生态。这并非简单的技术叠加&#xff0c;而是一场关于数据主权、算力分配与信任机制的深度博弈。本文将从"数据流动的拓扑学"视角&#xff0c;探讨二者融合如何重构数字社会的基础设施…...

【大模型实战篇】--阿里云百炼搭建MCP Agent

MCP协议&#xff08;Model Communication Protocol&#xff0c;模型通信协议&#xff09;是大语言模型&#xff08;LLM&#xff09;与外部系统或其他模型交互时的一种标准化通信框架&#xff0c;旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...

基于PySide6与pycatia的CATIA智能倒角工具开发全解析

引言&#xff1a;工业设计中的倒角革命 在机械设计领域&#xff0c;倒角操作是零件加工前的必要工序。传统手动操作效率低下且易出错本文基于PySide6pycatia技术栈&#xff0c;提出一种支持批量智能倒角、参数动态校验、跨层级操作的自动化方案&#xff0c;其核心突破体现在&a…...

css 二维码始终显示在按钮的正下方,并且根据不同的屏幕分辨率自动调整位置

一、需求 “求职入口” 下面的浮窗位置在其正下方&#xff0c;并且浏览器分辨的改变&#xff08;拖动浏览器&#xff09;&#xff0c;位置依旧在最下方 二、实现 <div class"btn_box"><div class"btn_link id"js-apply">求职入口<di…...

串口接收的使用-中断

1、引言 单片机串口、按键等等这种外部输入的&#xff0c; 用轮询的方式非常浪费资源&#xff0c;所以最好的方法就是使用中断接收数据。 2、串口 对于串口中断&#xff0c; 使用的非常频繁。 1. 基本原理 串口中断接收通过以下方式工作&#xff1a; 当串口接收到一个字节…...

处理 Flutter 没有反应

现象 有以下几种 VS Code 中 Initializing the Flutter SDK. This may take a few minutes. 会一直维持在这个右下角提示窗, 但是无后续动作 Flutter CMD flutter_console.bat 执行 --version 或者 doctor [-v] 没有任何输出, 命令卡住 解决办法 参考官方说明 管理员身份…...

Linux-服务器负载评估方法

在 Linux 服务器中&#xff0c;top 命令显示的 load average&#xff08;平均负载&#xff09;反映了系统在特定时间段内的负载情况。它通常显示为三个数值&#xff0c;分别代表过去 1 分钟、5 分钟和 15 分钟的平均负载。 1. 什么是 Load Average&#xff1f; Load average …...

入门51单片机(1)-----点灯大师梦开始的地方

前言 这一次的博客主要是要记录一下学习的记录的,方便以后去复习一下的&#xff0c;当然这篇博客还是针于零基础的伙伴萌&#xff0c;看完这篇博客&#xff0c;大家就可以学会点灯了。 安装软件 方法一下一下来教&#xff01;&#xff01;萌新宝贝萌可以学会的&#xff01;帮…...

3.数组(随想录)

1.二分查找 *2.移除元素 还有一个小优化&#xff08;可以不看&#xff09; 3.有序数组的平方 *4.长度最小的子数组 &#xff08;3种解法&#xff09; 5.螺旋矩阵 ||...

解决import pyqtgraph.opengl报错

在使用pyqtgraph时&#xff0c;出现没有OpenGL模块的报错 报错信息 ModuleNotFoundError: No module named OpenGL 解决方案 该环境下没有安装OpenGL库导致&#xff0c;输入以下代码进行安装&#xff1a; pip install PyOpenGL conda install -c conda-forge pyopengl 安…...

大模型面经 | 请你介绍一下ReAct(Reasoning and Acting)?

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

C#设计模式-状态模式

状态模式案例解析&#xff1a;三态循环灯的实现 案例概述 本案例使用 状态模式&#xff08;State Pattern&#xff09; 实现了一个 三态循环灯 的功能。每点击一次按钮&#xff0c;灯的状态会按顺序切换&#xff08;状态1 → 状态2 → 状态3 → 状态1...&#xff09;&#xff…...

LLM实现text2SQL实战总结

LLM在组织内部应用的一类重要场景就是利用LLM的NL2SQL能力&#xff0c;简化用户对数据库的访问。本文主要介绍如何使用LLM生成SQL语句&#xff0c;不涉及到如何训练提升LLM的SQL生成能力。 开启正文之前&#xff0c;我们先明确一下这类功能在组织内服务的目标群体。我们将服务目…...

字节跳动开源 LangManus:不止是 Manus 平替,更是下一代 AI 自动化引擎

当 “AI 自动化” 成为科技领域最炙手可热的关键词&#xff0c;我们仿佛置身于一场激动人心的变革前夜。各行各业都在翘首以盼&#xff0c;期待 AI 技术能够真正解放生产力&#xff0c;将人类从繁琐重复的工作中解脱出来。在这个充满无限可能的时代&#xff0c;字节跳动悄然发布…...

21.C++11

1.列表初始化 1.1C11中的{} •C11以后想统⼀初始化⽅式&#xff0c;试图实现⼀切对象皆可⽤{}初始化&#xff0c;{}初始化也叫做列表初始化。 • 内置类型⽀持&#xff0c;⾃定义类型也⽀持&#xff0c;⾃定义类型本质是类型转换&#xff0c;中间会产⽣临时对象&#xff0c;最…...

STM32 HAL库之WDG示例代码

独立看门狗&#xff08;IWDG&#xff09; 初始化独立看门狗&#xff0c;在main.c中的 MX_IWDG_Init();&#xff0c;也就是iwdg.c中的初始化代码 void MX_IWDG_Init(void) {/* USER CODE BEGIN IWDG_Init 0 *//* USER CODE END IWDG_Init 0 *//* USER CODE BEGIN IWDG_Init 1 …...

Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)

Spring AI 发布了它的 1.0.0 版本的第七个里程碑&#xff08;M7&#xff09;&#xff0c;下个月就是 RC1&#xff0c;紧接着就是 GA&#xff01;&#xff0c;对于我们 Java 开发者来说&#xff0c;这绝对是个值得关注的好消息&#xff01; 但是对于 Java 学习者来说&#xff0c…...

jdk 安装

oracle官网 : Java Archive | Oracle 中国 export JAVA_HOME/Users/xxxxx/app/services/x86jdk/jdk1.8.0_431.jdk/Contents/Home export PATH$JAVA_HOME/bin:$PATH 华为镜像网站&#xff1a;Index of java-local/jdk...

Windows服务器组建与综合服务部署技术方案

目录 一、项目背景与需求分析 1.1 企业网络架构 1.2 核心服务需求矩阵 二、Active Directory与权限管理体系 2.1 用户账户标准化 2.2 文件服务器纵深防御 三、高可用服务集群构建 3.1 分布式文件服务(DFS) 3.2 打印服务高可用方案 四、安全加固与审计体系 4.1 本地安…...

3.2.2.2 Spring Boot配置视图控制器

在Spring Boot中配置视图控制器可以简化页面跳转跳逻辑。通过实现WebMvcConfigurer接口的addViewControllers方法&#xff0c;可以直接将URL映射到特定的视图&#xff0c;而无需编写控制器类。例如&#xff0c;将根路径"/"映射到welcome.html视图&#xff0c;当访问应…...

华为OD机试真题——找出两个整数数组中同时出现的整数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 华为OD机试真题《找出两个整数数组中同时出现的整数》: 目录 题目名称:找出两个整数数组中同…...

Go 1.24 新方法:编写性能测试用例方法 testing.B.Loop 介绍

Go 开发者在使用 testing包编写基准测试用例时&#xff0c;如果不注意&#xff0c;可能会遇到各种陷阱。这些陷阱&#xff0c;导致基准测试结果不准确。Go1.24 版本引入了一种新的基准测试编写方式&#xff0c;它同样易用&#xff0c;并且可以帮助规避编写基准测试时的一些坑。…...