pulsar官方文档学习记录——pulsasr事务

news2024/11/13 15:03:45

pulsar事务

之前pulsar消息机制,和架构概览作为一个后端搬砖的需要了解的也差不多了。再补充个pulsar事务

因为exactly-once语义应用场景很多

pulsar事务可以能使流应用程序能够在一个原子操作中 ,消费、处理消息,生成消息。

需要事务的原因

随着流处理星期,对具有更强的处理保障的流处理应用的需求也随之增长。很多业务场景,例如金融,使用流处理引擎为用户处理借方和贷方的业务。这类场景无一例外的要求消息每条消息都只被处理一次。换句话说,如果流处理应用程序消费消息A并生成结果作为消息B(B=f(A))则 exactly-once 处理意味着当且仅当B成功生成,反之全部失败

在这里插入图片描述

Pulsar事务API增强了流处理和消息传递语义和处理保证。他使得流处理应用程序 能够在一个原子操作中使用、处理和生成消息。这意味着事务中 的一批消息可以从多个主题分区接收、生成并由多个主题分区确认。事务中涉及的所有操作作为一个单元成功或失败 。

幂等生产者的限制

使用pulsasr幂等生产者可以避免数据丢失或者重复,但他不能为跨多个分区 的写入提供保证(多分区topic保证不了呗)

在pulsar中,最高级别的消息传递保证是在单分区使用具有exactly once语义的幂等生产者。即每条消息都只持久化u一次 ,而不会丢失数据和重复。但这个方案会有一些限制:

  • 由于单调递增的seq ID (理解为消息序列号) 这种方案只能用于单分区,单生产者。多分区多生产者是没有原子性的

    如果在生产消息或接受消息出些异常(某些组件 crash,例如client,broker, bk等)消息会重新发送/处理,可能会造成消息丢失或重复

    • 对于生产者,你也不知道这次丢了哪些数据,会尝试重新发送一定量数据,这会造成数据被持久化了多次 。如果不重发,那么有些数据是持久化了一次,但其他的就会丢了

    • 对于消费者来说,他不知道broker是否受到了消息(ack消息) 因此消费者可能不会重试发送ack,这会导致收到重复消息。

      所以消费者 需要依赖更多机制保证ACK一次

什么是pulsar事务

事务增强了pullsar的消息传递语义和pulsar function的处理保证。pulsar事务API支持多个主题的原子写入和确认。

事务允许:

  • 生产者将一批消息发送到多个topic,其中该批次中的所有消息要么最终对消费者都可见,要么都不可见
  • 端到端 exactly-once语义(消费,处理,生产)

事务语义

pulsar事务有如下语义

  • 所有操作在事务内都会做当作一个单元提交
    • 要么所有消息提交,要么一个不提交
    • 每个而消息被写入或消费一次,不会丢失数据或重复,即使发生故障
    • 如果事务被中止,所有事务内的写入和ack都会回滚
  • 事务中的一组消息可以从多个分区接收,生成,并由多个分区确认
    • 消费者只能读取已提交的消息。换句话说,broker不会传递属于事务中的消息或者属于中止事务的消息
    • 跨多分区消息写入是原子的
    • 跨多个subscripitions的ack是原子的。在一个事务ID中ACK消息时,一个消息被成功确认仅一次

事务和流处理

流处理在pulsar中就是一个消费—处理—生产操作。

在这里插入图片描述

pulsar事务支持端到端exatly-once流处理。意味着消息不会在source处丢失和在sink处重复

用例

pulsar2.8.0之前,流处理APP不好构建exactyly-once。例如pulsar + flink。pulsar flink connector在puslar 2.8.0之前只提供at-least-once sink connector 和 exactly-once source connector。这意味着最多支持at-least-once语义。在2.8.0后,pulsar flink sink connector 可以提供exactly-onnce语义,基于实现TwoPhaseCommitSinkFunction并且用pulsar事务API和sink消息关联起来。

事务如何工作的

关键概念
TC

transaction coordinator事务协调器是一个broker里的模块。

  • 它维护了事务的整个生命周期 ,和保护事务不发生错误
  • 处理事务超时,确保事务超时后终止
Transaction log

所有事务元数据都保留在事务日志中。事务日志由pulsar topic支持 。如果TC崩溃,他可以从 事务日志中 恢复事务的元数据。事务日志存储的是事务的状态而不是 事务中实际的消息(实际消息存储在 实际的主题分区中)

Transaction buffer

事务内向主题分区生成的消息会被存储在事务缓冲区(TB)中。在提交事务前,事务缓冲区的消息对消费者都是 不可见的。事务中止时,事务缓冲区 的消息都会被丢弃

事务缓冲区将所有正在进行和中止的事务存储在 内存中。所有消息都发送到实际的topic中。事务提交后,事务缓冲区中的消息对消费者而言可见。

Transaction ID

TxnID 是表示pulsar中唯一事务。事务ID是128bit大小。最高16位用于保留TC的ID,其余用于每个TC中单调递增的数字。通过 TxnId 可以轻松定位到异常的事务

Pending acknowledge state

待确认状态管理在事务完成之前维护事务内消息的ACK。如果消息处于待确认状态,则该消息不能被其他事务确认,直到该消息从挂起确认状态中 删除

pending ack state 是保存在pending acknowledge log中。新的broker可以从日志中 恢复对应状态,确保ACK不会丢失。

数据流
开启事务

在这里插入图片描述

StepDescription
1.1pulsar client 找到对应的TC
1.2transaction coordinator会为事务分配事务ID。在事务日志中,记录事务及其事务ID和状态(OPEN)。这确保无论TC如何崩溃,事务状态都会持久保存
1.3事务日志发送保存事务ID的 结果给TC
1.4记录事务状态条目后,tc把TxnId发回给pulsar client
事务内推送消息

在这个阶段。pulsar client 进入事务循环,重复消费-处理-生产操作。这是个的阶段。可能由多个生成和确认请求组成。

在这里插入图片描述

事务中,推送消息步骤如下

StepDescription
2.1.1在向新主题分区发送消息前。需要发送请求给TC区将对应分区添加到事务中
2.1.2TC将事务分区的修改记录到事务日志中确保持久性。这确保TC直到事务正在处理的所有分区。TCK而已在分区结束阶段提交或中止每个分区上的修改
2.1.3事务日志将分区修改结果发送回给TC
2.1.4TC返回添加新分区到事务的结果给client
2.2.1pulsasr客户端开始 向分区生成消息。这部分流程与正常消息相同,芝士事务生成的消息包含事务ID
2.2.2broker往分区记录消息
事务中ack消息

在这个阶段,client向TC发送请求,将订阅名确认为事务的一部分

在这里插入图片描述

StepDescription
3.1.1client发送请求给TC 区添加已经确认的订阅名
3.1.2TC记录订阅的添加,这确保他直到事务处理的所有订阅。可以在结束阶段提交或者中止每个订阅的更改
3.1.3事务日志将记录新分区的结果(用于确认消息),发给TC
3.1.4TC响应clinet的请求,发送被确认的新分区添加的结果
3.2pulsar客户端确认订阅上的消息 ,这部分请求和确认消息流程相同,芝士确认请求携带事务ID
3.3broker 接收到确认请求并校验是否属于事务
事务结束阶段

在结束阶段,pulsar client决定提交或中止事务。当确认 消息中检测到冲突时,可以中止事务

End transaction request

当客户端完成了一个事务,需要发送一个结束事务请求

在这里插入图片描述

StepDescription
4.1.1客户端发送结束事务请求(里面有个字段代表是事务提交还是中止).
4.1.2transaction coordinator记录COMMITTING 或 ABORTING 到事务日志中
4.1.3事务日志发送提交或中止记录的结果
事务完成阶段

该阶段,TC会向事务中的所有分区提交或中 修改

在这里插入图片描述

StepDescription
4.2.1TC在订阅上提交事务,和在分区上提交事务
4.2.2broker(producer)将实际的提交写入实际分区里。broker(ack)将acked的commited mark写入订阅 的pending ack 分区
4.2.3数据日志将写入产生的提交发给broker。同时 pending ack data log 将写入acked已提交的结果发给broker。cursor移动到下一个位置
标记事务提交或中止

TC会将最终事务状态写到事务日志完成事务

在这里插入图片描述

StepDescription
4.3.1在成功提交或中止此次事务中涉及的所有分区所生产的消息和ACKH偶。TC会将最终COMMITTED或ABORTED事务状态写入事务日志。表明事务完成。事务日志中与该事务关联的所有消息都可以安全删除
4.3.2事务日志将已提交的事务结果返回给TC
4.3.3发送事务提交结果给client

总的来说事务是指消费,处理,生产操作。其中就涉及到上面的ACK阶段和推送消息阶段

https://cloud.tencent.com/developer/article/1949452

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

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

相关文章

JS高级类型存储方式——含堆/栈分析

1、内存 在编写正式内容前,首先需要弄清楚的一个概念就是:内存 内存 :也就是电脑中的硬件 ,内存越大,可以同时开启的程序就越多内存的作用: 存储运行中的代码,把代码执行过程中所需要的数据&…

Halcon20.11深度学习目标检测模型

1.前言:.Halcon的深度学习标注工具一直在更新,我下载的20.11版本的Deep Learning Tool已经显示过期,无奈只能下载最新版MVTec Deep Learning Tool 24.05。不过最新版的标注工具做的很人性化,分类,目标检测,…

化挑战为机遇,联想凌拓迎来杨旭时代

【全球存储观察 | 科技热点关注】 2024年7月,联想凌拓CEO杨旭上任,引发业界广泛关注,成为国内数据存储领域的新闻焦点。 现在,联想凌拓迎来了杨旭时代。作为联想凌拓CEO,杨旭的到任给联想凌拓带来了怎样的…

又有不少人要为《黑神话:悟空》买电脑了

1. 什么是 3A 游戏?2. 《黑神话:悟空》是一款怎样的游戏?3. 又有不少人要为《黑神话:悟空》买电脑了 3.1. 《黑神话:悟空》对电脑性能的要求3.2. 性能测试工具 不管你是游戏玩家还是非游戏玩家,这两天肯定被“黑悟空”刷屏了。 因为就在昨…

爆赞!斯坦福大学力作《深度学习漫画书》,翻烂它都不为过!

“斯坦福大学深度学习漫画书”是一本以漫画形式介绍深度学习基础知识的书籍,作者是Andrew Ng。 这本书以漫画形式切入,将一图胜千言的道理玩到了极致!并通过生动有趣的漫画形式来深入了解深度学习的概念和应用,把复杂的深度学习技…

【本社翻译】Unity官方XR开发电子书

上个月(2024年7月),Unity 官方发布了一本聚焦 XR 开发的电子书,书名为《Create Virtual and Mixed Reality Experiences in Unity》。本书系统介绍了以 XR Interaction Toolkit 为代表的一系列 Unity XR 开发工具集,深…

基于JavaEE的远程医疗管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

有源音箱申请Hi-Res认证指南

有源音箱(也称为主动式音箱)是一种内置功率放大器的音箱,其显著特点是音箱内部含有一套功率放大电路,可以直接通过音频线(如RCA线、3.5mm音频线或莲花线)与信号源(如电视、电脑、DVD播放器等&am…

LLM+Agent+多模态:大模型全栈入门、从0到企业落地、前沿论文,一定要看看!(全攻略保姆教程)

现在搞AI科研,基本上都离不开大模型。不管是“水”篇论文还是冲顶会,结合LLM的创新点都非常多。 但是LLM相关的内容很多,学校的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。 针对所有自学遇到…

使用yolov5实现目标检测和yolov8实现分割简单案例

一、前置 测试这个案例之前需要安装一些前置的东西,如果已经安装的可以忽略,下面我给出我跟着做的一些很好的博客提供大家参考,因为我们主要目的还是实现yolov5的目标检测。 1、安装nvidia显卡驱动 可以参考:【Windows】安装NV…

黑夜力作-Web爬虫入门与实战精讲-专栏导读

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师&am…

高性能minio集群环境搭建(配视频教程)

为后续进行《小卷原创视频教程:spring boot 3 vue3文件上传最佳实践》的大文件上传项目实战,这里带着小伙伴一起搭建下分布式开源文件存储minIO的集群环境。后续将对这个环境进行spring boot的集成,以进行企业级大文件上传的对接。 文章目录…

分布式基础理论——CAP理论和BASE理论

文章目录 CAP 理论BASE 理论参考资料 CAP 理论 CAP定理(CAP theorem)指出,在分布式系统中,设计读写操作时只能同时满足以下三个特性中的两个: 一致性(Consistency) : 所有节点访问同一份最新的…

Leetcode每日刷题之3.无重复字符的最长子串(C++)

1.题目解析 本题的目标是在给定的字符串中找出不含有重复字符的最长子串,并且返回其长度,这道题核心就是如何去重并且不能遗漏以保证子串长度最长,题目来源:3.无重复字符的最长子串 2.算法原理 本题的算法原理主要是"滑动窗口"也就…

做数据采集,你真的了解PLC插槽号吗?

有很多PLC可以在系统里配置多个独立CPU,各自有自己的任务。也有一些PLC,虽然只有一个CPU,但是,其位置是可变的。外部进行数据采集时,首先要搞明白采集目标是哪个CPU,否则,就会张冠李戴&#xff…

[大模型]Milvus Lite安装

文章目录 前提相关链接官方网站中文网站 创建虚拟环境安装Milvus连接Milvusattu连接工具attu官方开源地址下载地址连接 Milvus 是一款开源的向量数据库,它主要特点是高可用、高性能和易扩展,主要用于处理海量向量数据的实时召回。它基于诸如 FAISS、Anno…

nginx和tomcat负载均衡,动静分离

文章目录 一,tomcat1.tomca用途2.tomcat重要目录 二,nginx1.Nginx应用2.nginx作用3.nginx的正向代理和反向代理3.1正向代理3.2反向代理(单级)3.3反向代理(多级) 4.nginx负载均衡4.1Nginx支持的常见的分流算法1. 轮询(Round Robin):2.最少连接数(LeastCon…

【日记】黑神话的优化感觉有些微妙(1188 字)

正文 今天省分行一把手来我们县里。很奇怪。一整天都在为迎接他做准备。中午也没有什么午休,全员到工位上值班值守。 就算如此我还是抽了一点所剩无几的时间,体验了一下黑神话。 上午 10 点钟,远程控制电脑开始解压昨天的预载。大概解压了一个…

120KW可编程液冷负载优势和特点

120KW可编程液冷负载是一种先进的电力设备,它采用液冷技术进行冷却,具有高效、稳定、安全等特点。以下是其优势和特点的详细介绍: 1. 高效冷却:液冷负载采用液冷技术进行冷却,能够更有效地将热量传导出去,提…

基于vue3的模拟数据mock.js应用

一、mock.js介绍 Mock.js 是一个用于生成随机数据,拦截 Ajax 请求的 JavaScript 库。它主要用于前后端分离开发时,模拟后端数据接口,使得前端开发者在不需要后端实际编写接口的情况下,也能进行开发、测试。 1、主要功能 生成随…