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

2024-02-22 13:04

本文主要是介绍第3.4章:StarRocks数据导入——Routine Load,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:本篇文章阐述的是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

这篇关于第3.4章:StarRocks数据导入——Routine Load的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735338

相关文章

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu