第3.4章:StarRocks数据导入-Routine Load

news2024/11/18 12:24:25

注:本篇文章阐述的是StarRocks-3.2版本的Routine Load导入机制

一、概述

     Routine Load(例行导入)支持用户提交一个常驻的导入任务,可以将消息流存储在 Kafka 的Topic中,通过订阅Topic 中的全部或部分分区的消息,从而实现数据不间断的导入至 StarRocks。(Routine Load任务是常驻进程)

     Routine Load 支持 Exactly-Once 语义,能够保证数据不丢不重。支持从Kakfa集群中消费 CSV、JSON、Avro (自 v3.0.1) 格式的数据。

    官网文档地址:

使用 Routine Load 导入数据 | StarRocks

CREATE ROUTINE LOAD | StarRocks

    总结:通过在数据库侧建立常驻消费者进程来拉取位于流系统上的数据,该消费者进程会按照定义好的消费逻辑和间隔,攒批数据之后调用stream load导入机制来实现数据导入。

二、Routine Load原理

2.1 流程图

    Routine Load的导入执行流程如下:

2.2 流程详解

 (1)用户通过客户端发起创建routine load任务的请求

(2)FE在收到请求后,会将请求任务通过Job Scheduler将任务拆分成若干个Task,每个Task被TaskScheduler分配到指定的BE上执行

  •   拆分规则:
  • FE 根据期望任务并行度desired_concurrent_number、Kafka Topic 的分区数量、存活 BE 数量等,计算得出实际任务并行度。
  • FE 根据实际任务并行度将导入作业分为若干导入任务,放入任务执行队列中。
  •  每个topic会有多个分区,分区与导入任务之间的对应关系为:
  • 每个分区的消息只能由一个对应的导入任务消费(一个分区只能由一个消费者消费)
  • 一个导入任务可能会消费一个或多个分区(一个分消费者可以消费一个或多个分区)
  • 分区尽可能均匀的分配给导入任务(kafka分区数尽量等于消费者数)

(3)拆分的每个task会被Task Scheduler调度到不同的BE节点上执行

     即:多个导入任务并行进行,消费kafka多个分区的消费,导入至StarRocks

  • 调度和提交导入任务

  FE定时调度任务会去执行队列中的导入人物,分配给选定的 Coordinator BE。调度导入任务的时间间隔由max_batch_interval 参数空值。并且 FE 会尽可能均匀地向所有 BE 分配导入任务

  • 执行导入任务

   Coordinator BE 执行导入任务,消费分区的消息,解析并过滤数据。导入任务需要消费足够多的消息,或者消费足够长时间。

   消费时间和消费的数据量由 FE 配置项 routine_load_task_consume_second、max_routine_load_batch_size决定。

   Coordinator BE将消息分发至相关Executor BE 节点,BE 节点将消息写入磁盘。

 (4)位于每个BE节点的Task 任务会按照预先定义好的消费逻辑,数据攒批后调用stream load任务,完成对应批次数据的导入

 (5)持续生成新的导入任务,不间断地导入数据

        Executor BE 节点成功写入数据后, Coordonator BE 会向 FE 汇报导入结果。FE根据汇报结果,继续生成新的导入任务,或者对失败的导入任务进行重试,连续地导入数据,并且能够保证导入数据不丢不重。

      总结:可以将上述的执行流程理解为一个个不断调度执行的Stream Load任务。在默认参数下,一个Stream Load任务被拆分成若干个Task,Task被调度后,开始对kafka进行为期15秒的数据消费,并现在内存中攒批15秒过后这批数据通过Stream Load的方式导入到对应数据表中,任务完成后向FE汇报,然后间隔10秒后,Task被再次调度,如果循环进行。从Task被调度到本次Stream Load任务完成,整个过程的超时时间默认限制是60秒。FE收到任务汇报结果后,会继续生成后续新的Task,或者对失败的Task进行重试(最多重试3次,都失败则任务暂停)。整个Stream Load作业通过不断的产生新的Task,来完成数据不间断的导入。

    上述提到的三个时间参数可以结合实际的业务情况来修改:

     ①:集群内每个Routine Load导入任务消费数据的最大时间,通过fe.conf中的routine_load_task_consume_second参数设置,默认为15s。(调整后需要重启 FE 使变更生效。)

    ②:子任务调度周期,在Routine Load语句中设置,参数max_batch_interval,默认为10秒。缩短任务调度周期可以加速数据消费,但是更小的任务调度周期也可能会带来更多的CPU资源消耗,还可能会导致Compaction的问题。

   ③:集群内部所有Routine Load任务的执行超时时间:由fe.conf中的task_timeout_second控制,默认为60s

2.3 注意事项

  • Routine Load本质上还是调用的Stream load任务,需要注意攒批频次的设置,不能太过于频繁的去调用,避免未合并的版本数超限(compaction合并问题)。

  • Routine Load任务的消费频次:根据消息的峰值变化速率来设定不同任务的消费频次。

  • 过多的Routine Load任务会占用一定的硬件资源,会导致查询性能的下降。(Routine Load任务是常驻进程

2.4 应用案例

    Routine Load导入案例,见文章:

第3.3章:StarRocks数据导入--Routine Load-CSDN博客

参考文章:
https://blog.csdn.net/ult_me/article/details/122865142?spm=1001.2014.3001.5501

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

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

相关文章

什么是EMC电磁兼容性测试?

摘要: 电磁兼容性测试(Electromagnetic Compatibility Testing,简称EMC测试)是对电子产品在电磁场方面干扰大小(EMI)和抗干扰能力(EMS)的综合评定。其目的是检测电器产品所产生的电磁辐射对人体…

代码随想录Leetcode 343. 整数拆分

题目&#xff1a; 代码(首刷看解析 2024年2月21日&#xff09;&#xff1a; dp[i]表示i所能拆分的最大乘积&#xff0c;则dp[i] 与dp[i - 1]的递推公式是&#xff1a; max( 1~n * dp[n ~ 1]) class Solution { public:int integerBreak(int n) {vector<int> dp(n 1);dp…

Python: argparse基本用法

Python: argparse基本用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;【Matplotlib之旅&#xff1a;零基础精通数据可视化】 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于深度学习、PyTorch、Python领域的优质内容…

快速清理_卸载docker_找到不用的进程_centos磁盘爆满_清理磁盘---Linux工作笔记071

查看大文件,并且按照大小排名 cd / | du -h |sort -hr|head -30 可以看到根据不用的结果进行删除 可以看到在/data/dict目录很大,里面的都可以删除 然后再去卸载docker,要不然,没有磁盘是卸载不了的 systemctl stop docker systemctl stop docker.socket yum remove docker-…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

JavaSE匿名对象 , 继承 , 抽象类

文章目录 1 面向对象回顾面向对象的核心思想是什么 ?现有的类还是先有的对象 ?Java类的创建 ?类中的组成成分 ?创建对象所使用的关键字 ?创建对象的格式 ?调用对象的成员 ?定义构造方法的格式 ?定义构造方法的特点 ?构造方法的作用 ?面向对象三大特征是什么 ?封装的…

java基础之 SPI机制

SPI机制说明 什么是SPI Service Provider Interface 机制是Java提供的一套用来被第三方实现或扩展的API&#xff0c;他可以用来启用框架扩展和替换组件。通过“基于接口的编程 策略模式 配置文件”组合实现的动态加载机制。SPI机制为某个接口寻找服务实现的机制&#xff0c;…

Autosar-Mcal配置详解-MCU

3.6.1创建、配置RAM 1)创建RAM配置 2)配置RAM 以F1KM R7F7016533ABG为例,它的local RAM有512K, global RAM 192K,Retention RAM 64K. Local RAM: local RAM就是程序平常使用的RAM,在DeepStop模式下内容会丢失。 Global RAM:主要用于DMA的源地址和目的地址使用,在Dee…

2012及其以上系统修改服务器密码指南

修改服务器密码指南,目前介绍两种不同的方案 方法一 指令式 winR键 弹出运行框里输入 cmd 点击确认或者右下角开始程序里面的点开运行 2.在弹出框里手动输入以下一组文字&#xff1a;net user administrator 123456 框内无法粘贴 需要手动输入 其中administrator 是用…

上传回显图片

<!-- 父页面--><el-dialog title"直播详情" :visible.sync"dialogFormVisible" append-to-body:close-on-click-modal"false" width"50%" close"dialogClose"><editUserVideo v-if"dialogFormVisible&q…

【Node.js】介绍、下载及安装

目录 一、什么是 Node.js 二、Node.js下载 下载方式1&#xff1a;直接在首页下载&#xff08;下载的是.msi后缀的安装包&#xff09; 下载方式2&#xff1a;点击官网顶上的DOWNLOAD 三、Node.js安装 .zip后缀的安装步骤 .msi后缀的安装步骤 一、什么是 Node.js Node.js …

计算以10为底的对数 math.log10(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算以10为底的对数 math.log10(x) [太阳]选择题 以下代码的输出结果中正确的是? import math print("【执行】math.log10(10)") print(math.log10(10)) print("【执行】math…

基于 QUIC 协议的 HTTP/3 正式发布!

近期&#xff0c;超文本传输协议新版本 HTTP/3 RFC 文档&#xff0c;已由互联网工程任务组&#xff08;IETF&#xff09;对外发布。HTTP/3 全称为 HTTP-over-QUIC&#xff0c;指在 QUIC&#xff08;Quick UDP Internet Connections, 快速 UDP 互联网连接&#xff09;上映射 HTT…

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 项目成员岑灌铭同学创作。 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略&#xff0c;每个应用可以选择不同的技术栈&#xff0c;独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端十…

十三、图像像素值统计

项目功能实现&#xff1a;对一张图像进行统计最大、最小像素值、均差以及方差的值 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 pixel_statistic.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class Pixel_Statistic { public:vo…

camunda源代码编译运行(三):验证camunda API接口功能

接上一篇文章&#xff1a;camunda源代码编译运行&#xff08;二&#xff09;&#xff1a;构建并运行camunda源代码工程 4.1、发布流程模型 先通过camunda的流程设计器设计一个流程&#xff0c;命名为&#xff1a;UserTask Flow1&#xff0c;然后发布流程&#xff0c;发布流程…

HUD阳光倒灌实验TFT温升实验太阳光模拟器

随着汽车行业的不断发展&#xff0c;车辆的智能化程度越来越高&#xff0c;而HUD抗干扰太阳光模拟器作为一种新型的解决驾驶员视线问题的方案&#xff0c;引起了人们的广泛关注。它能够有效地解决驾驶员在阳光强烈或者夜间光线不足时的视线问题&#xff0c;提高了驾驶的安全性和…

Java写爱心

突然想用Java写一个爱心&#xff0c;程序运行效果如下&#xff1a; 话不多说&#xff0c;上代码 ! public class LovingHeart {/*** 判断坐标是否在爱心范围内*/private static boolean inHeart(float x,float y){float ax*xy*y-1;return a*a*a-x*x*y*y*y<0.0f;}/*** 爱心…

【Vuforia+Unity】AR05-实物3D模型识别功能实现

对于3D物体的识别&#xff0c;可以是虚拟的也可以是实物的&#xff0c;但是对于虚拟的三维模型意义不大&#xff0c;我们完全可以把三维模型放在屏幕上截一张图&#xff0c;以图片识别的方式召唤数字内容&#xff0c;不过在虚拟现实中或许有用。 因此本文探讨的技术路线主要是…

Gitee教程2(完整流程)

1.配置git git config --global user.name "用户名" git config --global user.email "密码" 如何获取&#xff1f; gitee右上角加号点击新建仓库&#xff0c;仓库名随便起一个就行 找到这条命令&#xff0c;把这两句一个一个复制到vscode终端就行 2.创建g…