2 个回答
恢复步骤如下:
1、故障检测与触发恢复
1、故障检测与触发恢复
TaskManager 故障:节点宕机、进程崩溃或心跳丢失。
JobManager 故障:需启用高可用(HA)模式,由备用 JobManager 接管。
心跳机制:TaskManager 定期向 JobManager 发送心跳,超时未收到则判定故障。
ZooKeeper 协调(HA 模式):监控 JobManager 存活状态,自动触发主备切换。
2、选择最近的检查点检查点有效性:JobManager 从外部存储(如 HDFS、S3)读取所有检查点元数据,选择 最新且完整 的检查点。
检查点元数据:包含状态文件路径、输入流偏移量(如 Kafka Offset)和作业拓扑信息。
3、重新调度任务与资源分配JobManager 根据检查点中记录的作业并行度,向资源管理器(如 YARN、K8s)申请资源。
新 TaskManager 启动后,JobManager 将任务(Task)重新分配到可用 Slot。
若并行度改变,根据 Key 的哈希值重新分配状态到新的并行子任务。
4、状态加载与初始化RocksDBStateBackend:从分布式存储下载 SST 文件到本地磁盘,初始化 RocksDB 实例。
HashMapStateBackend:直接从持久化存储加载状态到 TaskManager 堆内存。
检查状态文件的完整性和元数据的正确性,若损坏则选择更早的检查点。
5、恢复数据源位置Kafka Source:从检查点记录的 Offset 重新消费数据,确保数据不丢失、不重复。
File Source:从检查点记录的文件路径和读取位置续传。
Source 只处理检查点生成后到达的数据,避免重复计算。
6、续传数据处理所有算子加载检查点中的状态(如窗口聚合结果、累加器值)。
通过 Watermark 对齐 恢复事件时间处理进度。
Sink 使用 两阶段提交(如 Kafka Producer 事务)确保外部系统一致性。
发布于:3周前 (05-16) IP属地:
举个案例来说明下,比如实时订单统计作业(Kafka → Flink → MySQL)他的恢复步骤如下:
故障发生:TaskManager 节点宕机,作业中断。
恢复触发:JobManager 检测到心跳丢失,触发恢复流程。
选择检查点:从 HDFS 加载最新的检查点(包含订单计数状态和 Kafka Offset=5000)。
资源分配:启动新的 TaskManager,重新分配任务到可用 Slot。
状态加载:RocksDB 从 HDFS 下载 SST 文件到本地,初始化订单计数状态。
Source 重置:Kafka 从 Offset=5000 开始消费新数据。
续传处理:算子基于恢复的状态继续统计,MySQL Sink 通过事务写入新结果。
发布于:3周前 (05-16) IP属地:
我来回答
您需要 登录 后回答此问题!