Flink实战(10)-checkpoint容错保证

news/2024/11/20 18:33:58/文章来源:https://www.cnblogs.com/JavaEdge/p/18346115

0 前言

程序在 Flink 集群运行,某个算子因为某些原因出现故障,如何处理

在故障恢复后,如何保证数据状态,和故障发生之前的数据状态一致?

1 什么是 checkpoint(检查点)?

Checkpoint 能生成快照(Snapshot)。

若 Flink 程序崩溃,重新运行程序时可以有选择地从这些快照进行恢复。

Checkpoint 是 Flink 可靠性的基石。

2 Checkpoint V.S State

  • State 指某个算子的数据状态,保存在堆内存
  • Checkpoint 指所有算子的数据状态,持久化保存

3 什么是savepoint(保存点)?

基于 checkpoint 机制的快照。

4 Checkpoint V.S Savepoint

Checkpoint 是 自动容错恢复机制,Savepoint 某个时间点的全局状态镜像

Checkpoint 是 Flink 系统行为 。Savepoint 是用户触发

Checkpoint 默认程序删除。Savepoint 会一直保存

5 数据流快照最简单的流程

  1. 暂停处理新流入数据,将新数据缓存起来
  2. 将算子任务的本地状态数据拷贝到一个远程的持久化存储上
  3. 继续处理新流入的数据,包括刚才缓存起来的数据

设置合理的并行度能够加快数据的处理

Flink 每个算子都可以设置并行度

Slot 使得 taskmanager 具有并发执行的能力

从 Source 到 sink,每当并行度发生变化或者数据分组( keyBy),就会产生任务。

一个任务的并行度为 N,就会有 N 个子任务。

7 Checkpoint 分布式快照流程

第1步

要实现分布式快照,最关键的是能够将数据流切分。Flink 中使用 Checkpoint Barrier(检查点分割线)来切分数据流

当 Source 子任务收到 Checkpoint 请求,该算子会对自己的数据状态保存快照。

向自己的下一个算子发送 Checkpoint Barrier,下一个算子只有收到上一个算子广播过来的 Checkpoint Barrier,才进行快照保存。

第2步

当 Sink 算子已经收到所有上游的 Checkpoint Barrie 时,进行以下 2 步操作:

  1. 保存自己的数据状态
  2. 并直接通知检查点协调器

检查点协调器在收集所有的 task 通知后,就认为这次的 Checkpoint 全局完成了。

下游算子有多个数据流输入,啥时才 checkpoint?

这就涉及到Barrie对齐机制,保证了 Checkpoint 数据状态的精确一致。

第1步:下一个算子某个通道接收了第一个ID为n的 Checkpoint Barrie

这个算子其他通道的ID 为n的 Checkpoint Barrie 还没到达

第2步:该算子将第一个ID为n的 Checkpoint Barrie 缓存

该个算子继续处理其他通道的ID为n的 Checkpoint Barrie

第3步:
该个算子所有通道的ID 为n的 Checkpoint Barrie 到达后
该算子执行快照

不进行 Barrier 对齐可以吗?

8 Checkpoint咋保证数据状态的一致性?

Flink内置的数据状态一致性

端到端的数据状态一致性

AT-MOST-ONCE(最多一次,已废除)

发生故障,可能会丢失数据

AT-LEAST-ONCE(至少一次)

发生故障,可能会有重复数据。

EXACTLY-ONCE(精确一次)

发生故障,能保证不丢失数据,也没有重复数据

KafkaSink 总共支持三种不同的语义保证(DeliveryGuarantee)。对于 DeliveryGuarantee.AT_LEAST_ONCEDeliveryGuarantee.EXACTLY_ONCE,Flink checkpoint 必须启用。默认情况下 KafkaSink 使用 DeliveryGuarantee.NONE

  • DeliveryGuarantee.NONE 不提供任何保证:消息有可能会因 Kafka broker 的原因发生丢失或因 Flink 的故障发生重复。
  • DeliveryGuarantee.AT_LEAST_ONCE: sink 在 checkpoint 时会等待 Kafka 缓冲区中的数据全部被 Kafka producer 确认。消息不会因 Kafka broker 端发生的事件而丢失,但可能会在 Flink 重启时重复,因为 Flink 会重新处理旧数据。
  • DeliveryGuarantee.EXACTLY_ONCE: 该模式下,Kafka sink 会将所有数据通过在 checkpoint 时提交的事务写入。因此,如果 consumer 只读取已提交的数据(参见 Kafka consumer 配置 isolation.level),在 Flink 发生重启时不会发生数据重复。然而这会使数据在 checkpoint 完成时才会可见,因此按需调整 checkpoint 间隔。请确认事务 ID 的前缀(transactionIdPrefix)对不同的应用是唯一的,以保证不同作业的事务 不会互相影响!此外,强烈建议将 Kafka 的事务超时时间调整至远大于 checkpoint 最大间隔 + 最大重启时间,否则 Kafka 对未提交事务的过期处理会导致数据丢失。

9 Data Source 和 Sink 的容错保证

当程序出现错误的时候,Flink 的容错机制能恢复并继续运行程序。这种错误包括机器硬件故障、网络故障、瞬态程序故障等。

只有当 source 参与快照机制,Flink 才能保证对自定义状态的精确一次更新。下表列举了 Flink 与其自带连接器的状态更新的保证。

Source Guarantees Notes
Apache Kafka 精确一次 根据你的版本用恰当的 Kafka 连接器
Amazon Kinesis Data Streams 精确一次
RabbitMQ 至多一次 (v 0.10) / 精确一次 (v 1.0)
Google PubSub 至少一次
Collections 精确一次
Files 精确一次
Sockets 至多一次

为保证端到端精确一次的数据交付(在精确一次的状态语义上更进一步),sink需要参与 checkpointing 机制。下表列举了 Flink 与其自带 sink 的交付保证(假设精确一次状态更新)。

Sink Guarantees Notes
Elasticsearch 至少一次
Opensearch 至少一次
Kafka producer 至少一次 / 精确一次 当使用事务生产者时,保证精确一次 (v 0.11+)
Cassandra sink 至少一次 / 精确一次 只有当更新是幂等时,保证精确一次
Amazon DynamoDB 至少一次
Amazon Kinesis Data Streams 至少一次
Amazon Kinesis Data Firehose 至少一次
File sinks 精确一次
Socket sinks 至少一次
Standard output 至少一次
Redis sink 至少一次

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

一个蒟蒻对简单距离的简单理解

一个蒟蒻对简单距离的简单理解: 呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃,写的简单粗暴,如有不对的,欢迎纠正 神马是距离? 在数学中,距离是泛函分析中最基本的概念之一。它所定义的距离空间连接了拓扑空间与赋范线性空间等其他空间,是…

P1133 教主的花园

原题链接 题解 假如不是环,你会做吗? 从左到右遍历 \(i\) 第 \(i\) 棵树的放置只与前面一棵树有关,线性dp 而图一定长这样:当第 \(n\) 棵树为 \(3\) 的时候,无论第一棵树是 \(1\) 还是 \(2\)(不能为3,因为3不会往上),都符合环的要求 \(1\) 同理 因此我们只需要考虑第 …

【linux】关于qemu-img创建虚拟机前端磁盘报错

问题描述: 使用qemu-img create -f qcow2 -b cirros.qcow2 vmhost.img 20G创建虚拟机磁盘出现以下报错,报错内容:qemu-img: vmhost.img: Backing file specified without backing formatDetected format of qcow2. [root@ecs images]# qemu-img create -f qcow2 -b cirros.q…

双端口RAM与多模块处理器

多模块处理器 多模块存储器是一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率。常用的有单体多字存储器和多体低位交叉存储器。CPU 的速度比存储器快得多,若同时从存储器中取出n条指令,就可以充分利用 CPU 资源,提高运行速度。多体交叉存储…

SRAM的Write Assist与Read Assist

SRAM的Write Assist与Read Assist 简介 随着工艺节点的不断提升,诸如阈值电压的偏差,以及供电电压的减小,寄生电阻电容的影响等,都会越来越影响SRAM的稳定性。因此需要通过write Assist和Read Assist方法来提升SRAM的写入能力,可读性以及稳定性。 具体来说,以一个典型的6…

只读存储器ROM

BIOS芯片就是一种ROM芯片,在开机后引导装入操作系统。逻辑上,主存由RAM+ROM组成,并且二者经常统一编址

SRAM和DRAM

SRAM和DRAM的比较SDRAM(同步动态随机存取存储器,英语:synchronous dynamic random-access memory)也是DRAM的一种DRAM的刷新DRAM 的刷新需要注意以下问题:刷新操作对CPU是透明的,即CPU不参与DRAM的刷新过程 DRAM的刷新单位是行,由芯片内部自行生成行地址 刷新操作类似于读…

【论文笔记】Cross-Domain WiFi Sensing with Channel State Information: A Survey

Cross-Domain WiFi Sensing with Channel State Information: A Survey Introduction检测领域: 检测领域里,大部分用的阈值检测或者简单的学习算法,例如SVM。fallsRT-Fall: A real-time and contactless fall detection system with commodity WiFi devices WiFall: Device-…

ARM Cortex-M3中断简介

中断优先级分组、系统中断优先级配置、中断屏蔽寄存器简介目录中断优先级分组三个系统中断优先级配置寄存器SHPR1SHPR2SHPR3三个中断屏蔽寄存器PRIMASKFAULTMASKBASEPRI 中断优先级分组 ARM Cortex-M 内核的 MCU 具有一个用于中断管理的嵌套向量中断控制器(NVIC,全称:Nested…

Python、R银行信用卡客户流失机器学习预测热门文章合集

原文链接:https://tecdat.cn/?p=37244 原文出处:拓端数据部落公众号 分析师: Cengjun Wang 目前,众多银行由于服务质量的降低、同业竞争的日益激烈等因素,面临着信用卡客户流失的棘手难题,这给银行经理施加了沉重的压力。而且,获取新的信用卡用户所需成本通常高于维持…