Doris数据库Routine Load,实时接入kafka数据

 Routine Load(例行导入)是 Apache Doris 提供的一种常驻流式导入功能,主要用于持续从 Kafka​ 中消费数据并实时写入 Doris 表中。它相当于在 Doris 内部运行了一个轻量级的 Consumer 客户端,实现了数据的“近实时”同步(通常秒级延迟)。

以下是关于 Routine Load 的核心介绍:

1. 核心特性

  • 数据源与格式:目前主要支持从 Kafka​ 消费数据,支持 CSV​ 和 JSON​ 两种文本格式。
  • 精确一次语义 (Exactly-Once):通过 Doris 的事务机制,确保数据不丢、不重,即使任务发生异常重启,也能从上次提交的 Offset 继续消费。
  • 高可用与自动恢复:作业提交后会常驻后台运行。如果遇到 Kafka 短暂不可用或 BE 节点抖动,Doris 会尝试自动恢复作业,无需人工干预(除非是表被删或数据质量严重错误等极端情况)。
  • 微批处理 (Micro-batch):并非逐条插入,而是将消费到的数据按时间或批量大小切分为一个个 Task(事务),并发写入,兼顾了实时性与导入效率。

2. 工作原理

  1. 作业 (Job):用户通过 CREATE ROUTINE LOAD提交一个常驻 Job,由 FE(前端)统一管理其生命周期(Running, Paused, Cancelled 等)。
  2. 任务 (Task):FE 会根据 Kafka Topic 的分区数和配置的并发度,将 Job 拆分为多个 Task。每个 Task 负责消费一个或多个 Kafka Partition 的数据。
  3. 执行与提交:Task 被下发到 BE(后端)节点执行,BE 拉取数据、进行转换和过滤,然后以 Stream Load 的方式写入存储层。每个 Task 是一个独立事务,完成后向 FE 汇报 Offset,FE 再生成新的 Task 继续消费。

3. 简单使用示例

创建一个从 Kafka 导入 CSV 数据的 Routine Load 作业:
CREATE ROUTINE LOAD db_name.job_name ON target_table
COLUMNS TERMINATED BY ",",   -- 指定CSV列分隔符
COLUMNS (user_id, name, age) -- 列映射
PROPERTIES (
    "desired_concurrent_number" = "3" -- 期望并发度
)
FROM KAFKA (
    "kafka_broker_list" = "broker1:9092,broker2:9092",
    "kafka_topic" = "my_topic",
    "kafka_offsets" = "OFFSET_BEGINNING" -- 从最早开始消费
);

4. 常用管理命令

  • 查看作业状态SHOW ROUTINE LOAD FOR db_name.job_name;
  • 暂停作业PAUSE ROUTINE LOAD FOR db_name.job_name;
  • 恢复作业RESUME ROUTINE LOAD FOR db_name.job_name;
  • 停止/删除作业STOP ROUTINE LOAD FOR db_name.job_name;(注意:停止后无法恢复,需重新创建)

5. 适用场景

  • 业务日志实时入库(如用户行为埋点)。
  • 业务数据库 Binlog 经 Kafka 中间件实时同步到 Doris 做分析。
  • 需要简化架构,不想维护外部 Flink/Spark Streaming 消费者代码的场景。
如果你有具体的 Kafka 数据格式或建表语句,我可以帮你写一个完整的创建脚本。
 

不建议使用Routine Load进行导入数据操作,推荐使用Flink查询Kafka数据再写入Doris,更容易控制导入数据单批次数据量,避免大量小文件产生。如果确实已经使用了Routine Load导入了数据,在没整改前请配置FE的“max_tolerable_backend_down_num”参数值为“1”,以提升导入数据可靠性。

 

参考链接:yuanbao、https://developer.aliyun.com/article/712385

posted @ 2026-05-06 15:26  所向披靡zz  阅读(3)  评论(0)    收藏  举报