Doris数据导入总结

最近学习了Doris数据导入相关知识,记录一下自己的理解,仅供大家参考

数据导入总览

  • 数据导入是原子性的 - 不论是使用 Broker Load 进行批量导入,还是使用 INSERT 语句进行单条导入,都是一个完整的事务操作。导入事务可以保证一批次内的数据原子生效,不会出现部分数据写入的情况。

  • 在 Doris 侧做到 At-Most-Once 语义,如果结合上游系统的 At-Least-Once 语义,则可以实现导入数据的 Exactly-Once 语义,该特性借助每次导数时提供一个唯一ID(lable)保证,doris内部保留30分钟内最近成功的label

数据导入类型

Broker Load

  • 异步导数,会在doris集群中启动broker进程,消耗集群资源,这种方式是在用户没有 Spark 这种计算资源的情况下使用 ,如果有 Spark 计算资源建议使用 Spark load

Routine Load

https://doris.apache.org/zh-CN/docs/1.2/data-operate/import/import-way/routine-load-manual

  • 主要用于导入kafka数据

  • 类似Druid读取kafka数据源,FE根据数据源的分区,分配task给BE,BE进程收到任务之后完成Task任务,BE完成任务之后会汇报给FE,FE再分配新的任务给BE

  • 执行 DELETE 操作前,可能需要先暂停例行导入作业,并等待已下发的 task 全部完成后,才可以执行 DELETE。 任务运行时长是怎么定义的

  • max_routine_load_job_num :FE 配置项,默认为100,可以运行时修改。该参数限制的例行导入作业的总数,包括 NEED_SCHEDULED, RUNNING, PAUSE 这些状态。超过后,不能在提交新的作业

  • max_consumer_num_per_group :BE 配置项,默认为 3。该参数表示一个子任务中最多生成几个 consumer 进行数据消费。对于 Kafka 数据源,一个 consumer 可能消费一个或多个 kafka partition。假设一个任务需要消费 6 个 kafka partition,则会生成 3 个 consumer,每个 consumer 消费 2 个 partition。如果只有 2 个 partition,则只会生成 2 个 consumer,每个 consumer 消费 1 个 partition。

疑问

  1. 一个集群默认情况下最多能起100个job,太少了,为什么

  2. 默认情况下 BE上的task 最多只能消费3个分区

  3. 在提交job时 是不是可以考虑定义每个task 运行时长,每次调度多少个task?

Binlog Load

https://doris.apache.org/zh-CN/docs/1.2/data-operate/import/import-way/binlog-load-manual

  • FE起动异步任务消费canal server数据,攒批后提交数据到BE

  • 在FE中每个mysql表对应一个Channel2

  • 当且仅当所有channel都提交成功,才会通过Ack命令通知canal并继续获取并消费数据

  • Binlog Load只能支持Unique类型的目标表,可以更新

  • Doris表结构和Mysql表结构字段顺序必须保持一致

  • 修改mysql表结构是否会影响数据同步作业?如果任务配置中有字段映射关系就不会,如没有同步任务就会失败

Spark Load

https://doris.apache.org/zh-CN/docs/1.2/data-operate/import/import-way/spark-load-manual

  • spark任务完成之后 还要用Broker 进程把数据转化成内部文件格式,为什么不用spark 直接转

  • 需要再FE配置spark 客户端环境

  • FE 底层通过执行 Yarn 命令去获取正在运行的 Application 的状态以及杀死 Application,因此需要为 FE 配置 Yarn 客户端

  • 为什么不直接用api方式?

Stream load

https://doris.apache.org/zh-CN/docs/1.2/data-operate/import/import-way/stream-load-manual

  • Stream load 是一个同步的导入方式,如果导入失败,用户自行决定重试

  • 用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中

  • Doris 会选定一个BE节点作为 Coordinator 节点,负责接数据并分发数据到其他数据节点。

  • 由于 Stream load 的原理是由 BE 发起的导入并分发数据,建议的导入数据量在 1G 到 10G 之间,适合本地数据导入

MySql load

  • FE接收到客户端执行的MySQL Load请求, 完成SQL解析工作,FE选择一个BE节点发送StreamLoad请求,适合本地小批量数据导入

Insert Into

https://doris.apache.org/zh-CN/docs/1.2/data-operate/import/import-way/insert-into-manual

  • INSERT INTO tbl (col1, col2, …) VALUES (1, 2, …), (1,3, …);命令仅用于 Demo,不要使用在测试或生产环境中

  • Insert Into 导入的超时时间是统一的,默认的 timeout 时间为1小时,可以修改配置

  • Insert Into 对数据量没有限制,大数据量导入也可以支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值