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

Flink的基于两阶段提交协议的事务数据汇实现

背景

在flink中可以通过使用事务性数据汇实现精准一次的保证,本文基于Kakfa的事务处理来看一下在Flink 内部如何实现基于两阶段提交协议的事务性数据汇.

flink kafka事务性数据汇的实现

1。首先在开始进行快照的时候也就是收到checkpoint通知的时候,在snapshot方法中会开启一个新的事务,代码如下:

   public void snapshotState(FunctionSnapshotContext context) throws Exception {// this is like the pre-commit of a 2-phase-commit transaction// we are ready to commit and remember the transactioncheckState(currentTransactionHolder != null,"bug: no transaction object when performing state snapshot");long checkpointId = context.getCheckpointId();LOG.debug("{} - checkpoint {} triggered, flushing transaction '{}'",name(),context.getCheckpointId(),currentTransactionHolder);preCommit(currentTransactionHolder.handle);// 调用kafkaProducer.flush();清理上一个事务的状态(注意不是提交),只是确保前一个事务的所有资源清理完毕pendingCommitTransactions.put(checkpointId, currentTransactionHolder);LOG.debug("{} - stored pending transactions {}", name(), pendingCommitTransactions);
// 调用producer.beginTransaction();方法开启一个新的kafka事务currentTransactionHolder = beginTransactionInternal();LOG.debug("{} - started new transaction '{}'", name(), currentTransactionHolder);state.clear();state.add(new State<>(this.currentTransactionHolder,new ArrayList<>(pendingCommitTransactions.values()),userContext));}

2.其次在JobManager通知检查点完成的通知方法,也就是notifyCheckpointComplete方法中提交事务

Iterator<Map.Entry<Long, TransactionHolder<TXN>>> pendingTransactionIterator =pendingCommitTransactions.entrySet().iterator();Throwable firstError = null;while (pendingTransactionIterator.hasNext()) {Map.Entry<Long, TransactionHolder<TXN>> entry = pendingTransactionIterator.next();Long pendingTransactionCheckpointId = entry.getKey();TransactionHolder<TXN> pendingTransaction = entry.getValue();if (pendingTransactionCheckpointId > checkpointId) {continue;}LOG.info("{} - checkpoint {} complete, committing transaction {} from checkpoint {}",name(),checkpointId,pendingTransaction,pendingTransactionCheckpointId);logWarningIfTimeoutAlmostReached(pendingTransaction);try {//调用producer.commitTransaction()方法提交事务commit(pendingTransaction.handle);} catch (Throwable t) {if (firstError == null) {firstError = t;}}LOG.debug("{} - committed checkpoint transaction {}", name(), pendingTransaction);pendingTransactionIterator.remove();}if (firstError != null) {throw new FlinkRuntimeException("Committing one of transactions failed, logging first encountered failure",firstError);}

至此,一个两阶段提交的flink事务性数据汇完成了,这个事务性数据汇可以构成端到端一致性的一部分

相关文章:

Flink的基于两阶段提交协议的事务数据汇实现

背景 在flink中可以通过使用事务性数据汇实现精准一次的保证&#xff0c;本文基于Kakfa的事务处理来看一下在Flink 内部如何实现基于两阶段提交协议的事务性数据汇. flink kafka事务性数据汇的实现 1。首先在开始进行快照的时候也就是收到checkpoint通知的时候&#xff0c;在…...

树模型(三)决策树

决策树是什么&#xff1f;决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block)&#xff0c;椭圆形成代表终止模块(terminating block)&#xff0c;表示已经得出结论&#xff0c;可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…...

vueday01——使用属性绑定+ref属性定位获取id

1.属性绑定&#xff08;Attribute 绑定&#xff09; 第一种写法 <div v-bind:id"refValue"> content </div> 第二种写法&#xff08;省略掉v-bind&#xff09; <div :id"refValue"> content </div> 2.代码展示 <template…...

LeetCode 260. 只出现一次的数字 III:异或

【LetMeFly】260.只出现一次的数字 III 力扣题目链接&#xff1a;https://leetcode.cn/problems/single-number-iii/ 给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返…...

使用PyTorch解决多分类问题:构建、训练和评估深度学习模型

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

基于nodejs+vue网课学习平台

各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改&#xff0c;以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…...

读书笔记:Effective C++ 2.0 版,条款13(初始化顺序==声明顺序)、条款14(基类有虚析构)

条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同 类成员是按照它们在类里被声明的顺序进行初始化的&#xff0c;和它们在成员初始化列表中列出的顺序没一点关系。 根本原因可能是考虑到内存的分布&#xff0c;按照定义顺序进行排列。 另外&#xff0c;初始化列表…...

flutter开发实战-下拉刷新与上拉加载更多实现

flutter开发实战-下拉刷新与上拉加载更多实现 在开发中经常遇到列表需要下拉刷新与上拉加载更多&#xff0c;这里使用EasyRefresh&#xff0c;版本是3.3.21 一、什么是EasyRefresh EasyRefresh可以在Flutter应用程序上轻松实现下拉刷新和上拉加载。它几乎支持所有Flutter Sc…...

旧手机热点机改造成服务器方案

如果你也跟我一样有这种想法, 那真的太酷了!!! ok,前提是得有root,不然体验大打折扣 目录 目录 1.做一个能爬墙能走百度直连的热点机(做热点机用) 2.做emby视频服务器 3.做文件服务, 存取文件 4.装青龙面板,跑一些定时任务 5.做远程摄像头监控 6.做web服务器 7.内网穿…...

网工实验笔记:策略路由PBR的应用场景

一、概述 PBR&#xff08;Policy-Based Routing&#xff0c;策略路由&#xff09;&#xff1a;PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发&#xff0c;更能基于其他元素进行数据转发&#xff0c;例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、…...

webrtc快速入门——使用 WebRTC 拍摄静止的照片

文章目录 使用 getUserMedia() 拍摄静态照片HTML 标记JavaScript 代码初始化startup() 函数获取元素引用获取流媒体 监听视频开始播放处理按钮上的点击包装 startup() 方法 清理照片框从流中捕获帧 例子代码HTML代码CSS代码JavaScript代码 过滤器使用特定设备 使用 getUserMedi…...

预约按摩app软件开发定制足浴SPA上们服务小程序

同城按摩小程序是一种基于地理位置服务的小程序&#xff0c;它可以帮助用户快速找到附近的按摩师&#xff0c;并提供在线预约、评价、支付等功能。用户可以通过手机或者其他移动设备访问同城按摩小程序&#xff0c;实现足不出户就能预约到专业的按摩服务。 一、同城按摩小程序的…...

jenkins出错与恢复

如果你的jenkins出现了如下图所示问题&#xff08;比如不能下载插件&#xff0c;无法保存任务等&#xff09;&#xff0c;这个时候就需要重新安装了。 一、卸载干净jenknis 要彻底卸载 Jenkins&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1、停止 Jenkins 服务&…...

ssh免密登录的原理RSA非对称加密的理解

RSA非对称加密&#xff0c;是采用公钥加密私钥解密的原则。 举个例子SSH的免密登录 SSH免密登录是通过使用公钥加密技术实现的。以下是SSH免密登录的原理&#xff1a; 1. 生成密钥对&#xff1a;首先&#xff0c;在客户端上生成一对密钥&#xff0c;包括一个私钥和一个公钥。私…...

【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

力扣每日一题41:缺失的第一个正数

题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3示例 2&#xff1a; 输…...

OpenCV与mediapipe实践

1. 安装前准备 开发环境&#xff1a;vscode venv 设置vscode, 建立项目&#xff0c;如: t1/src, 用vscode打开&#xff0c;新建终端Terminal&#xff0c;这时可能会有错误产生&#xff0c;解决办法&#xff1a; 运行命令&#xff1a;Set-ExecutionPolicy -ExecutionPolicy …...

【css拾遗】粘性布局实现有滚动条的情况下,按钮固定在页面底部展示

效果&#xff1a; 滚动条滚动过程中&#xff0c;按钮的位置位于手机的底部 滚动条滚到底部时&#xff0c;按钮的位置正常 这个position:sticky真的好用&#xff0c;我原先的想法是利用滚动条滚动事件去控制&#xff0c;没想到css就可以解决 <template><view class…...

git 创建并配置 GitHub 连接密钥

前记&#xff1a; git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform&#xff1a;Windows 10 Git version&#xff1a;git version 2.32.0.windows.1 Function&#xff1a; git 创建并配置 GitHub…...

使用Premiere、PhotoShop和Audition做视频特效

今天接到一个做视频的任务&#xff0c;给一个精忠报国的视频&#xff0c;要求&#xff1a;   ①去掉人声&#xff0c;就是将唱歌的人声去掉&#xff0c;只留下伴奏&#xff1b;   ②截图视频中的横幅&#xff0c;做一个展开的效果&#xff0c;类似卷纸慢慢展开&#xff1b;…...

ClawdOS:为AI Agent构建可视化操作系统的全栈实践

1. 项目概述&#xff1a;为你的AI大脑装上眼睛和手如果你和我一样&#xff0c;是OpenClaw&#xff08;前身是Moltbot/Clawdbot&#xff09;的早期用户&#xff0c;那你一定经历过这种场景&#xff1a;在终端里&#xff0c;你的AI助手聪明绝顶&#xff0c;能写代码、查资料、分析…...

Jira、ONES、ClickUp 对比:哪款研发管理软件更适合中国研发团队?

快速迭代的互联网和软件行业&#xff0c;研发团队的效率管理工具几乎决定了产品交付的速度与质量。研发管理软件不仅是“任务分派”的工具&#xff0c;更是团队 需求管理、版本迭代、缺陷跟踪、研发效能度量 的基础设施。 目前市面上主流的研发管理软件众多&#xff0c;不同工…...

毕业答辩 PPT,让 AI 替你打工:百考通 AI 如何帮你告别排版内耗与逻辑焦虑

​ 又是一年毕业季&#xff0c;论文写完了&#xff0c;查重过了&#xff0c;导师点头了&#xff0c;你以为可以松口气了&#xff1f; 不&#xff0c;还有一座大山叫“答辩 PPT”。 曾经&#xff0c;我也以为 PPT 只是论文的“精简版”&#xff0c;复制粘贴就能搞定。直到我熬…...

ESXi 8.0 最低存储要求:8GB 起步,这样装最稳

在部署 VMware ESXi 8.0 虚拟化环境时&#xff0c;存储规划是基础且关键的一步&#xff0c;很多新手常混淆系统引导盘与虚拟机数据盘的要求。核心结论清晰&#xff1a;ESXi 8.0 最低需 8GB SD 卡 / USB 作为引导介质&#xff0c;同时必须搭配独立的数据存储&#xff1b;生产环境…...

5分钟终极指南:用Nexus Mods App告别模组管理噩梦

5分钟终极指南&#xff1a;用Nexus Mods App告别模组管理噩梦 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 还在为游戏模组冲突、依赖缺失而烦恼吗&#xff1f;Nexus Mod…...

2025年英雄联盟国服内存级换肤技术深度解析:R3nzSkin架构设计与实现

2025年英雄联盟国服内存级换肤技术深度解析&#xff1a;R3nzSkin架构设计与实现 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否曾想过&#xff…...

WeChatMsg:微信聊天记录本地化解析与多格式导出技术方案

WeChatMsg&#xff1a;微信聊天记录本地化解析与多格式导出技术方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...

机器人伦理工程化:从道德困境到可解释决策系统的技术实现

1. 项目概述&#xff1a;当机器人需要做出道德抉择十年前&#xff0c;当我在实验室里调试一台协作机器人的碰撞检测算法时&#xff0c;一个从未预想过的问题出现了&#xff1a;在一条狭窄的通道里&#xff0c;机器人的移动路径上同时出现了一位匆忙的工程师和一个价值百万的实验…...

智能体集成德国铁路实时信息:无需API的Node.js工具箱openclaw-bahn详解

1. 项目概述&#xff1a;一个为智能体打造的德国铁路工具箱如果你经常在德国乘坐火车&#xff0c;或者像我一样&#xff0c;需要为一些自动化流程&#xff08;比如智能体&#xff09;集成实时交通信息&#xff0c;那么你肯定对德国铁路&#xff08;Deutsche Bahn, DB&#xff0…...

从AI概念到落地:传统AI与生成式AI的技术分野与实战选型

1. 从“谈AI色变”到“用AI解题”&#xff1a;我们到底在讨论什么&#xff1f;如果你最近两年没在火星上度假&#xff0c;那你肯定被“AI”这个词全方位轰炸过。从科技媒体的头条&#xff0c;到投资机构的报告&#xff0c;再到你手机里突然冒出的各种“智能”功能&#xff0c;A…...