StarRocks——Stream Load 事务接口实现原理

news2024/9/24 17:37:06

目录

前言

一、StarRocks 数据导入

二、StarRocks 事务写入原理

三、InLong 实时写入StarRocks原理

3.1 InLong概述

3.2 基本原理

3.3 详细流程

3.3.1 任务写入数据

3.3.2 任务保存检查点

3.3.3 任务如何确认保存点成功

3.3.4 任务如何初始化

3.4 Exactly Once 保证

3.4.1 数据不重复保证

3.4.2 数据不丢失保证

四、Stream Load事务接口使用

4.1 事务接口优势

4.1.1 Exactly-once语义

4.1.2 提升导入性能

4.2 事务接口使用限制

4.3 事务接口使用案例

前言

   StarRocks 支持通过 Stream Load 方式实时写入数据,为进一步提升导入效率,从 2.4 版本实现了新的事务接口,本文阐述Stream Load 事务接口实现原理

 官网文章地址:

使用 Stream Load 事务接口导入 | StarRocks

一、StarRocks 数据导入

     StarRocks丰富的导入方式为业务在报表推送、实时数据分析、数据湖分析等场景提供了助力。目前支持的四种数据导入方式,分别是 Stream Load, Broker Load, Routine Load,Spark Load。此外,为了支持和Flink、Kafka等其他系统之间实现跨系统的两阶段提交(预提交事务、提交事务)提升高并发Stream Load导入场景下的性能,StarRocks 自 2.4 版本起提供 Stream Load 事务接口。

二、StarRocks 事务写入原理

    StarRocks事务写入基于典型的两阶段提交事务实现,客户端使用事务主要包含以下几个接口:

  • /api/transaction/begin:开启一个新事务。

  • /api/transaction/prepare:预提交当前事务,临时持久化变更。预提交一个事务后,可以继续提交或者回滚该事务。在这种机制下,如果在事务预提交成功后StarRocks发生了宕机,仍然可以在系统恢复后继续执行提交。
  • /api/transaction/commit:提交当前事务,持久化变更。
  • /api/transaction/rollback:回滚当前事务,回滚变更。
  • /api/transaction/load:发送数据,可以使用已有的事务,如果没有指定事务label,会随机生成一个label进行数据写入。

     ps:事务去重:复用StarRocks现有的label标签机制,通过标签绑定事务,实现事务的“至多一次(At-Most-Once)”语义。

  不同阶段对应的StarRocks内部流程如下:

  • begin + load 阶段

   开始数据导入时,客户端通过begin transaction接口开启一个新的事务,提交给FE leader中的事务管理模块,事务管理模块充当了两阶段提交中的事务管理者,用来管理事务的原子性、事务的回滚等。每一个事务可以设置一个label,StarRocks FE会检查本次begin transaction 请求的label是否已经存在,如果label在系统中不存在,则会为当前label开启一个新的事务。begin阶段之后可以使用该label对StarRocks进行Stream Load导入,Stream Load返回成功的条件是数据的副本数量超过了tablet数据分片的副本数的一半,剩下的一本由StarRocks的副本机制保证完整写入。

  • Commit 阶段

   FE接受commit信息之后,会将事务状态改成commited。之后事务管理器会向BE节点发送publish version信息,BE收到publish中的版本信息后,会将本地的消息版本改成本次事务对应的版本;同时会向FE上报,表示数据版本已经成功修改,之后FE会将事务状态改成VISIBLE。此时数据对用户可见,客户端执行查询的时候,会比较版本号,从而解决读写版本冲突;

  • Rollback 阶段

   如果写入过程或者commit过程失败,则事务abort,清理事务的任务在BE节点异步执行,将数据导入过程中生成的批次数据标记为不可用,这些数据之后会从BE上被删除。

   总结:

  • StarRocks可以通过给数据设置版本控制(rowset version)来解决读写冲突。
  • StarRocks通过引入FE中的事务管理实现了两阶段导入,保证了导入的原子性。

三、InLong 实时写入StarRocks原理

3.1 InLong概述

    Apache InLong(应龙) 提供自动、安全、可靠和高性能的数据传输能力,方便业务快速构建基于流式的数据分析、建模和应用。该模块阐述 InLong基于事务接口,实现数据实时写入 StarRocks的技术原理,主要对写入过程中的精准一次性保证进行阐述。

3.2 基本原理

   InLong实时写入StarRocks如下图所示,实时写入通过 Flink实时任务来实现,Flink任务写入侧的具体执行逻辑如下:

  • 根据Flink并行度配置生成多个Task执行写入;
  • 每一个Task基于StarRocks提供的Stream Load机制进行写入,每一个Flink checkpoint周期会使用相同的StarRocks事务label;
  • Flink开始做checkpoint时,当前写入的table以及对应的StarRocks事务label会一并存入到state状态中;
  • Flink写入算子收到checkpoint完成的消息时,将所有的table对应的事务进行commit,此时数据才会对用户可见;

3.3 详细流程

3.3.1 任务写入数据

  在写入数据时,首先不会直接将数据写入到StarRocks中,而是将每个table对应的数据进行缓存。当批次数据达到一定大小之后才会调用一次刷新flush操作,flush操作包括以下流程:

  • 启动一个事务,每一个Flink checkpoint周期会使用相同的StarRocks事务label,调用/api/transaction/begin
  • 使用该label进行数据写入,调用 /api/transaction/load 实际写入数据

  这种写入流程保证了:

  • 每次写入相同的事务label,提交时可以提交一整个checkpoint周期的所有的数据,单个checkpointh只会提交一次,重复提交StarRocks不会生效。
  • 每次写入都是批次写入,缓解StarRocks写入压力。(内存攒批+flush)

3.3.2 任务保存检查点

   任务保存检查点的时候会进行以下流程:

  • 对目前内存中保存的所有表数据都进行flush,确保内存中所有的数据已经导入到StarRocks,当前数据在StarRocks中不可见
  • 对所有的表对应的导入事务,进行prepare调用(预提交事务) ,如果prepare失败,则表示当前StarRocks不支持该事务的提交,调用abort接口,并失败重试
  • 对于prepare成功的事务,保存在当前flink状态信息中state

3.3.3 任务如何确认保存点成功

  当Flink Task收到checkpoint检查点已经完成的确认信息后,对checkpoint过程中保存的事务信息进行commit,如果commit失败,则重启任务。commit成功的事务会在checkpoint中删除。

3.3.4 任务如何初始化

    当任务启动时,Task拿到上一个保存点的状态信息,恢复版本暂时未commit的事务信息,对checkpoint id小于等于当前checkpoint id的事务进行提交。

3.4 Exactly Once 保证

  要保证流式写入的 Exactly once语义等同于:需要保证数据的不重复以及不丢失。

  Exactly once语义的实现需要合理的定义checkpoint间隔,优点是在各种异常情况下保障数据不丢失不重复,缺点是数据可见时间取决于checkpoint间隔(flink将所有的table对应的事务进行commit,此时数据才会对用户可见)

3.4.1 数据不重复保证

   基于Flink的流式任务产生数据重复的原因主要是Flink从某一个checkpoint启动时,重复提交之前已经提交过的数据。InLong实时写入中,状态中会记录本checkpoint下prepare成功的事务id,故障恢复时,会提交该事务id,如果该事务id在之前的流程中被提交过,StarRocks会返回报错信息表示该事务id已经提交过,该次提交会被忽略,通过这种机制保证了数据的不重复。

3.4.2 数据不丢失保证

  假设在数据写入过程中,有部分数据写入失败,Flink checkpoint机制会保证任务重启后从上一个保存点启动,Source端会从上次保存消费位置开始消费,这样能够保证数据的不丢失,之前写入失败的数据会在重启后继续执行写入。

四、Stream Load事务接口使用

4.1 事务接口优势

4.1.1 Exactly-once语义

  • 通过“预提交事务”,“提交事务”,方便实现跨系统的两阶段提交。例如配合在Flink实现“精确一次(Exactly-once)”语义。

4.1.2 提升导入性能

  在通过程序提交Stream Load作业的场景中,Stream Load事务接口允许在一个导入作业中按需合并发送多次小批量的数据后“提交事务”,从而能减少数据导入的版本,提升导入性能。

4.2 事务接口使用限制

   事务接口当前具有如下使用限制:

  • 只支持单库单表事务,未来将会支持跨库多表事务。

  • 只支持单客户端并发数据写入,未来将会支持多客户端并发数据写入。

  • 支持在单个事务中多次调用数据写入接口 /api/transaction/load 来写入数据,但是要求所有 /api/transaction/load 接口中的参数设置必须保持一致。

  • 导入CSV格式的数据时,需要确保每行数据结尾都有行分隔符。

4.3 事务接口使用案例

  具体使用案例见官网:

使用 Stream Load 事务接口导入 | StarRocks

参考文章:

Apache InLong 实时同步数据到 StarRocks 原理与实践

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

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

相关文章

【MATLAB】 ICEEMDAN信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 ICEEMDAN信号分解算法 ICEEMDAN 分解又叫改进的自适应噪声完备集合经验模态分解,英文全称为 Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise。 ICEEMDAN (I…

【书生·浦语大模型实战营】第 2 节 -课后作业

第二节 -轻松玩转书生浦语大模型趣味 Demo-课后作业 0.课程体验0.1 鸡兔同笼0.2 逻辑推理0.3 AI会毁灭人类吗? 1.课后作业1.1 基础作业1.1.1 作业11.1.2 作业2 0.课程体验 课程链接:https://github.com/internLM/tutorial 首先,这个课程是免费…

《Spring Security 简易速速上手小册》第7章 REST API 与微服务安全(2024 最新版)

文章目录 7.1 保护 REST API7.1.1 基础知识详解7.1.2 重点案例:使用 JWT 进行身份验证和授权案例 Demo 7.1.3 拓展案例 1:API 密钥认证案例 Demo测试API密钥认证 7.1.4 拓展案例 2:使用 OAuth2 保护 API案例 Demo测试 OAuth2 保护的 API 7.2 …

vue 之 Quill编辑器封装

安装 npm install vue-quill-editor --save <template><div><el-upload:action"uploadUrl":before-upload"handleBeforeUpload":on-success"handleUploadSuccess":on-error"handleUploadError"name"file":sh…

家政行业的数字转型:开发智能化家政预约APP的挑战与机遇

为了适应这一变化&#xff0c;许多家政企业开始积极探索数字化转型&#xff0c;其中包括开发智能化预约APP。本文将探讨开发智能化预约APP所面临的挑战与机遇。 ​一、挑战&#xff1a; 1.用户体验设计&#xff1a; -开发智能化预约APP需要注重用户体验设计&#xff0c;包括…

Pytest插件pytest-selenium-让自动化测试更简洁

在现代Web应用的开发中&#xff0c;自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具&#xff0c;以便于使用Python进行Web应用的自动化测试。本文将深入介绍 pytest-selenium 插件的基本用法和实际案例&#xff0c;…

Web Tomcat

目录 1 前言2 Tomcat的安装3 Tomcat文件的构成4 Tomcat的使用步骤 1 前言 Tomcat是一个 http(web)的容器&#xff0c;笼统的理解一下所有的网站都叫做web。这个web容器可以把我们的前端(htmlcssjs)和后端(servlet)代码都运行起来。 Tomcat是一个免费的开源的Servlet容器&#…

可视化场景(1):销售业绩大屏-是骡子是马,牵出溜溜

销售业绩可视化大屏的是一种有力的销售数据管理工具&#xff0c;贝格前端工场分享一批给友友们&#xff0c;如需要定制&#xff0c;可以与我们联络&#xff0c;开始了。 销售业绩可视化大屏是一种将销售数据以图表、数字、文字等形式展示在大屏幕上的数据可视化工具。它的作用主…

如何在OnlyFans付费订阅?

OnlyFans成立于2016年&#xff0c;允许内容创作者从用户那里获得资金&#xff0c;用户需要支付订阅费用才能查看他们的内容。它在多个领域受到欢迎&#xff0c;包括音乐、健身、摄影&#xff0c;以及某种内容创作。 如何在OnlyFans付费订阅&#xff1f; 我们订阅之前需要一张…

JOSEF约瑟 漏电继电器LLJ-400F 配套零序互感器φ100mm 50-500mA 0.1S 导轨安装

系列型号&#xff1a; LLJ-150F(S)漏电继电器 LLJ-160F(S)漏电继电器 LLJ-200F(S)漏电继电器 LLJ-250F(S)漏电继电器 LLJ-300F(S)漏电继电器 LLJ-320F(S)漏电继电器 LLJ-400F(S)漏电继电器 LLJ-500F(S)漏电继电器 LLJ-600F(S)漏电继电器 一、产品用途及特点 LLJ-FS系列漏电继电…

图表背后的智慧:办公场景中的数据可视化革新

在现代办公场景中&#xff0c;数据可视化的应用已经成为提高效率、推动创新的得力工具。无论是管理层还是普通员工&#xff0c;都能从数据可视化中受益匪浅。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 首先&#xff0c;数据可视化提升了数据的易读性与理解性…

GitLab代码服务器搭建

在Ubuntu上搭建GitLab服务器需要按照一系列步骤进行操作。以下是一个基本的指南&#xff1a; 安装必要的依赖包&#xff1a;首先&#xff0c;确保系统已经安装了所需的依赖包。这通常包括curl、openssh-server、ca-certificates和postfix&#xff08;如果你打算使用GitLab的邮件…

985机械研一转码,java还是c++?

985机械研一转码&#xff0c;java还是c&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&…

初学Vue总结

0 Vue概述 问题&#xff1a;我们已经学过了htmlCssjavascript,可以开发前端页面了&#xff0c;但会发现&#xff0c;效率太低了。那么&#xff0c;有没有什么工具可以提高我们的开发效率&#xff0c;加快开发速度呢&#xff1f; 他来了&#xff0c;他来了&#xff0c;他大佬似…

总结一下linux性能检测和调优手段

1.perf 是 Linux 系统中性能分析工具&#xff0c;用于收集性能相关的信息。它可以用于查看 CPU 使用情况、内存性能、磁盘 I/O 等&#xff0c;以帮助开发者找到性能瓶颈。 以下是一些 perf 常见用法和示例&#xff1a; 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

一篇文章速通static关键字(JAVA)

目录 1.原理——内存机制 1.1 修饰对象 1.2 lifecycle生命周期 2. 静态属性&#xff08;类属性&#xff09;和实例属性&#xff08;对象属性&#xff09; 2.1 定义方式 2.2 调用方法 3. 静态方法和属性 3.1 在同一个类中 3.2 在不同类中 4.总结&#xff08;关键&#x…

UE5 UE4 自定义插件自动开启关联插件(plugin enable)

在我们自己编写UE4、UE5的插件时&#xff0c;常常需要开启相关联的插件进行功能编写。 例如&#xff1a;UE4/5 批量进行贴图Texture压缩、修改饱和度_ue4批量修改纹理大小-CSDN博客 而让插件使用者每次使用时&#xff0c;依次进行开启其他相关联插件确实有些麻烦。 如何只需要…

剑指offer刷题记录Day 1 03.数组中重复的数字 ---> 06.从尾到头打印链表

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 0、关于核心代码模式该怎么刷题&#xff1f;1、…

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

MCTS代码

这段代码的背景是玩一个游戏。游戏的参数有NUM_TURNS&#xff0c;在第i回合&#xff0c;你可以从一个整数[-2,2,3&#xff0c;-3]*&#xff08;NUM_TURNS1-i&#xff09;中进行选择。例如&#xff0c;在一个4回合的游戏中&#xff0c;在第1回合&#xff0c;你可以从[-8,8,12&am…