Flink-端到端精确一次(End-To-End Exactly-Once)

news2025/1/11 23:40:29

1.总结 

目的:想要在故障恢复后不丢数据

  1. 输入端
    1. 保证可以重复发送数据
    2. 如果是kafka,Flink负责维护offset,不用kafka维护
    3. 设置kafka的隔离级别为:读已提交
  2. flink
    1. 开启检查点
    2. 采用对齐或者不对齐的精确一次
  3. 输出端
    1. kafka
      1. 幂等+事务
      2. 两阶段提交(2pc)
    2. hbase
      1. 幂等,因为有put操作
    3. doris
      1. 两阶段提交(2pc)

实际应用中,最难做到、也最希望做到的一致性语义,无疑就是端到端(end-to-end)的“精确一次”。我们知道,对于Flink内部来说,检查点机制可以保证故障恢复后数据不丢(在能够重放的前提下),并且只处理一次,所以已经可以做到exactly-once的一致性语义了。

所以端到端一致性的关键点,就在于输入的数据源端和输出的外部存储端。

 2.输入端保证

输入端主要指的就是Flink读取的外部数据源。对于一些数据源来说,并不提供数据的缓冲或是持久化保存,数据被消费之后就彻底不存在了,例如socket文本流。对于这样的数据源,故障后我们即使通过检查点恢复之前的状态,可保存检查点之后到发生故障期间的数据已经不能重发了,这就会导致数据丢失。所以就只能保证at-most-once的一致性语义,相当于没有保证。

想要在故障恢复后不丢数据,外部数据源就必须拥有重放数据的能力。常见的做法就是对数据进行持久化保存,并且可以重设数据的读取位置。一个最经典的应用就是Kafka。在Flink的Source任务中将数据读取的偏移量保存为状态,这样就可以在故障恢复时从检查点中读取出来,对数据源重置偏移量,重新获取数据。

数据源可重放数据,或者说可重置读取数据偏移量,加上Flink的Source算子将偏移量作为状态保存进检查点,就可以保证数据不丢。这是达到at-least-once一致性语义的基本要求,当然也是实现端到端exactly-once的基本要求。

 3.输出端保证

有了Flink的检查点机制,以及可重放数据的外部数据源,我们已经能做到at-least-once了。但是想要实现exactly-once却有更大的困难:数据有可能重复写入外部系统。

因为检查点保存之后,继续到来的数据也会一一处理,任务的状态也会更新,最终通过Sink任务将计算结果输出到外部系统;只是状态改变还没有存到下一个检查点中。这时如果出现故障,这些数据都会重新来一遍,就计算了两次。我们知道对Flink内部状态来说,重复计算的动作是没有影响的,因为状态已经回滚,最终改变只会发生一次;但对于外部系统来说,已经写入的结果就是泼出去的水,已经无法收回了,再次执行写入就会把同一个数据写入两次。

所以这时,我们只保证了端到端的at-least-once语义。

为了实现端到端exactly-once,我们还需要对外部存储系统、以及Sink连接器有额外的要求。能够保证exactly-once一致性的写入方式有两种:

  1. 幂等写入
  2. 事务写入

我们需要外部存储系统对这两种写入方式的支持,而Flink也为提供了一些Sink连接器接口。接下来我们进行展开讲解。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

让你不再疑惑加水印用什么软件

每个人都有自己的独特创意和作品,而在现今互联网时代,分享和传播作品已成为一种普遍现象。然而,随着互联网的发展,越来越多的作品被人恶意盗用和复制,使得原创作者的权益受到了侵害。为了保护自己的作品,加…

每天一道大厂SQL题【Day27】脉脉真题实战(三)连续两天活跃用户

文章目录 每天一道大厂SQL题【Day27】脉脉真题实战(三)连续两天活跃用户每日语录第26题 中级题: 活跃时长的均值1. 需求列表思路分析 答案获取加技术群讨论附表文末SQL小技巧 后记 每天一道大厂SQL题【Day27】脉脉真题实战(三)连续两天活跃用户 大家好,我是Maynor。…

Vue中的事件处理

一,基本使用 1.使用v-on:事件名或者事件名绑定事件 常见的事件有: onclick, 鼠标单击事件; ondblclick, 鼠标双击事件;onmousedown,鼠标按下去的事件;onmouseup,鼠标弹起事件; onmouseover,onmouseente…

mybatis-plus逻辑删除与唯一约束冲突问题

问题描述: 在使用mybatis-plus进行数据库的增删查改的时候,我们一般都会设置用户名为唯一索引(为什么?因为用户名肯定不能重复) 当第一次新增用户时,会在数据库插入一条用户数据:能插入成功代…

计算机科学与技术专业课程内容汇总

大学课程结束了,真的好快。昨天把专业课程涉及到的内容汇总了下,还是挺多的,存到网盘里也不会丢,电脑存储空间还能扩大。 把网盘链接放在这里,希望大家共勉。图片中所涉内容仅为部分课程。 链接:https://…

Jmeter测试 Websocket服务器

目录 一、Jmeter 安装1.1 自定义 JMeter 的 JVM 设置 二、WebSocket插件安装三、环境准备3.1 连接数限制修改 四、测试4.1 脚本构建4.1.1 连接请求4.1.2 心跳4.1.3 WebSocket request-response Sampler4.1.4 WebSocket Single Write Sampler4.1.5 WebSocket Single Read Sample…

Mac配置CMake

目录 写在前面命令行安装安装包安装准备配置 参考完 写在前面 1、本文内容 Mac上配置CMake 2、平台 Mac 3、转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/131807995 命令行安装 通过brew安装,先安装brew https://blog.csdn.n…

Sourcetree 同时推送两个仓库

Sourcetree 同时推送两个仓库 添加远端仓库添加完成推送推送完成git 命令版 添加远端仓库 注意名称不能相同 ,自己取个名子区分一下,别把自己搞懵就行了。 添加完成 推送 选择仓库。选择目标分支。并勾选跟踪。推送。 推送完成 推送完成后,…

应用案例|探索高精度3D机器视觉在车间滑橇检测与测量中的应用

Part.1 应用行业 随着科技的不断进步,3D机器视觉技术逐渐成为了现实世界与数字世界之间的桥梁。3D机器视觉技术能使计算机感知和理解三维空间重的物体和场景,被广泛应用于机器人引导、工业检测等行业,例如:物流、电商、教育、医疗…

开发 SpringBoot 项目所用版本的选择

一、为什么要关注 springboot 的版本? 最开始做项目时候,组长说创建一个 springboot 2.5.4 的项目,mysql使用 5.6.X ,maven使用是3.6.X。其实最开始我也没有多想,直接照做了,但是后面回想自己平时看到的SpringBoot开源…

【Win10系统下载Python3】

Python3官网:https://www.python.org/downloads/windows/ 注

谷歌Bard:ChatGPT之外的第三选择

2023年年初,为了对应ChatGPT方面的压力,谷歌Bard仓促上线,此后便进入了低调前行。目前为止已经迭代了9个版本,也就是在近期的版本更新中支持了中文(简体/繁体)语言,对国内用户可以说又友好了一步…

pytest入门介绍

目录 1、pytest是一个非常成熟的全功能的Python测试框架。 2、pytest安装 3、要求 4、运行 5、生成html报告 6、常见问题 1、pytest是一个非常成熟的全功能的Python测试框架。 主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的…

孩子没有身份证如何坐火车

既然写这个话题就有必要搞清楚,儿童多大是免票的。(儿童票怎么买,我们在买票的时候点击选择乘车人,左侧是添加乘车人右侧是添加随行儿童) 如果你有12306app 点击app -> 点击我的 -> 点击使用须知 -> 点击常见问题 上面的有效证件…

配置需求分类中的科目分配

其中科目分配的内容都为灰色无法修改 结果是在科目分配里面单独维护的: 路径:销售分销-基本功能-科目分配/成本-维护成本科目分配的需求类别

three.js学习(基础)

目录 前言: 参考文档: 实现 1、安装 2、声明 3、引入使用 前言: 前面学习了three.js物体的动画展示,接下来学习应用图形界面更改变量 目标、页面提供操作区域进行变量修改 参考文档: dat.gui - npmA lightwe…

韦东山Linux驱动入门实验班(4)LED驱动

前言 (1)我们学习完hello驱动之后,对驱动程序开发有了一点点认识了之后。现在可以开始对硬件进行实际操作了,本人使用的是i.max6ull开发板,STM32MP157和全志的D1H也会进行讲解。 (2)如果还有对于…

ubuntu 设置系统时间矫正

1、安装ntpdate,同步标准时间 2、修改时区 3、在.profile文件中写入上面提示的信息,保存退出、更新配置文件或者重启生效 3.1、或者配合上面的cp那条命令,用下面的命令保存到底层 $ hwclock --systohc 4、重启之后,查看日期时间已…

【动手学深度学习】--14.网络中的网络 NiN

文章目录 网络中的网络 NiN1.NiN块1.2NiN架构1.3NiN模型1.4训练模型 网络中的网络 NiN 学习视频:网络中的网络 NiN【动手学深度学习v2】 官方笔记:网络中的网络(NiN) 全连接层的问题 LeNet、AlexNet和VGG都有一个共同的设计模式…

如果微信消息显示“已读”的话......

近日,一则 #如果微信显示已读的话# 话题冲上了微博热搜榜单。 “已读”是很多社交软件拥有的功能,如果对方接收并查看了消息,就会在消息上显示“已读”,但目前微信还没有推出这项功能。 对于“已读”功能,不少网友纷纷…