Flink从入门到放弃-Flink重启策略

本文详细介绍了Apache Flink中的重启策略,包括固定间隔重启、失败率重启和无重启策略。阐述了如何通过配置文件和应用代码来设定这些策略,以及它们在故障恢复中的作用。

概述

  • Flink支持不同的重启策略,以在故障发生时控制作业如何重启

  • 集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。

  • 如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。

  • 常用的重启:1.策略固定间隔 (Fixed delay)2.失败率 (Failure rate)3.无重启 (No restart)

  • 如果没有启用 checkpointing,则使用无重启 (no restart) 策略。如果启用了 checkpointing,但没有配置重启策略,则使用固定间隔 (fixed-delay) 策略

  • 重启策略可以在flink-conf.yaml中配置,表示全局的配置。也可以在应用代码中动态指定,会覆盖全局配置

 

2重启策略分类

固定间隔:

第一种:全局配置 flink-conf.yaml

restart-strategy: fixed-delay 
restart-strategy.fixed-delay.attempts: 3 
restart-strategy.fixed-delay.delay: 10 s

第二种:应用代码设置:

env.setRestartStrategy(RestartStrategies.fixedDelayRestart( 3,// 尝试重启的次数 
Time.of(10, TimeUnit.SECONDS) // 间隔 ));

失败率:

  • 失败率重启策略在Job失败后会重启,但是超过失败率后,Job会最终被认定失败。在两个连续的重启尝试之间,重启策略会等待一个固定的时间

下面配置是5分钟内若失败了3次则认为该job失败,重试间隔为10s

第一种:全局配置 flink-conf.yaml

   

restart-strategy: failure-rate 

restart-strategy.failure-rate.max-failures-per-interval: 3 

restart-strategy.failure-rate.failure-rate-interval: 5 min 

restart-strategy.failure-rate.delay: 10 s

第二种:应用代码设置

env.setRestartStrategy(RestartStrategies.failureRateRestart( 3,//一个时间段内的最大失败次数 
Time.of(5, TimeUnit.MINUTES), // 衡量失败次数的是时间段 Time.of(10, TimeUnit.SECONDS) // 间隔 ));

无重启策略

第一种:全局配置 flink-conf.yaml

restart-strategy: none

第二种:应用代码设置

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); env.setRestartStrategy(RestartStrategies.noRestart());

 

3实际代码演示

 

public class RestartTest {

public static void main(String[] args) {
//获取flink的运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 每隔1000 ms进行启动一个检查点【设置checkpoint的周期】
env.enableCheckpointing(1000);

// 间隔10秒 重启3次
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,Time.seconds(10)));

//5分钟内若失败了3次则认为该job失败,重试间隔为10s
env.setRestartStrategy(RestartStrategies.failureRateRestart(3,Time.of(5,TimeUnit.MINUTES),Time.of(10,TimeUnit.SECONDS)));

//不重试
env.setRestartStrategy(RestartStrategies.noRestart());
}//

}
### Flink CDC 入门教程 Flink CDC 是一种用于实时捕获数据库变化并将这些变化流式传输至其他系统的工具。通过监控源数据库中的更改事件(如插入、更新和删除操作),可以将这些变更数据高效地传递给目标系统。 #### 安装与配置环境 为了开始使用 Flink CDC,需先安装 Apache Flink 并设置好开发环境。对于初学者来说,可以通过官方文档了解如何下载并部署 Flink 环境[^1]。接着,在本地环境中执行如下命令来启动 Flink SQL CLI: ```bash ./bin/sql-client.sh ``` 此命令会打开一个交互式的 Shell 界面,允许用户编写并运行基于 SQL 的查询语句[^3]。 #### 创建连接器实例 创建一个新的 Debezium 连接器实例以监听 MySQL 数据库的变化。这通常涉及到定义 JSON 格式的属性文件,指定要监视的具体表及其模式等信息。例如: ```json { "connector": "mysql-cdc", "hostname": "localhost", "port": "3306", "username": "root", "password": "", "database-name": "test_db" } ``` 上述配置指定了一个名为 `mysql-cdc` 的连接器去连接位于 localhost 上端口为 3306 的 MySQL 实例,并针对特定数据库 test_db 中的所有表格启用变更捕捉功能。 --- ### 高级用法 随着对基础概念的理解加深,探索更复杂的场景变得至关重要。这里介绍一些常见的高级主题和技术细节。 #### 处理复杂的数据结构 当面对嵌套或数组类型的字段时,可能需要自定义序列化逻辑来处理这类特殊的数据形式。利用 Avro 或 Protobuf 可以为用户提供更加灵活的选择方案。此外,还可以考虑采用 Kafka Connect SMT (Single Message Transforms) 来简化某些转换过程[^2]。 #### 整合多种数据源 除了单一关系型数据库外,现代应用往往涉及多个异构存储系统之间的同步需求。借助于多输入支持特性,能够轻松实现跨平台间的数据交换。比如同时从 PostgreSQL 和 MongoDB 提取增量更新记录,并将其统一发送到下游消费者处进行进一步加工处理。 --- ### 最佳实践 遵循良好的设计原则有助于构建稳定可靠的 ETL 流程。以下是几个值得推荐的做法: - **确保幂等性**:即使重复接收相同的消息也不会影响最终状态的一致性和准确性; - **优化性能瓶颈**:合理调整批大小参数以及并发度级别,从而提高吞吐量; - **加强错误恢复机制**:实施 checkpointing 技术保障作业失败后的快速重启能力; - **定期维护元数据仓库**:保持 schema registry 更新以便更好地适应上游架构演进趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值