第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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I