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. 工作原理
-
作业 (Job):用户通过
CREATE ROUTINE LOAD提交一个常驻 Job,由 FE(前端)统一管理其生命周期(Running, Paused, Cancelled 等)。 -
任务 (Task):FE 会根据 Kafka Topic 的分区数和配置的并发度,将 Job 拆分为多个 Task。每个 Task 负责消费一个或多个 Kafka Partition 的数据。
-
执行与提交: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
浙公网安备 33010602011771号