摄入概述
在 Druid 中加载数据的过程称为摄入(Ingestion)或索引(Indexing)。当您将数据摄入 Druid 时,Druid 会从源系统中读取数据并将其存储为名为 分片(Segments) 的数据文件。通常,每个分片文件包含数百万行数据。
对于大多数摄入方法,Druid 的 Middle Manager 进程或 Indexer 进程会负责加载源数据。
在摄入过程中,Druid 会创建分片并将其存储在 深层存储(Deep storage) 中。Historical 节点会将这些分片加载到内存中以响应查询。对于流式摄入,Middle Manager 和 Indexer 可以在数据到达时实时响应查询。有关更多信息,请参阅 存储概述。
本主题介绍了流式和批处理摄入方法。以下主题描述了适用于所有 摄入方法 的概念和信息:
- Druid 模式模型:介绍了数据源(Datasources)、主时间戳、维度(Dimensions)和指标(Metrics)的概念。
- 数据汇总(Rollup):描述了汇总的概念,并提供了最大化利用汇总优势的建议。
- 分区(Partitioning):描述了 Druid 中的时间块分区和二级分区。
- 摄入规范参考:提供了摄入规范中配置选项的参考手册。
有关每种摄入方法特有的概念和配置的更多信息,请参阅相应摄入方法的主题。
摄入方法
下表列出了 Druid 最常见的数据摄入方法,并进行了对比,以帮助您为自己的场景选择最合适的方法。每种摄入方法都支持其特定的源系统。有关每种方法的工作原理以及特定于该方法的配置属性的详细信息,请查看其文档页面。
流式摄入
流式摄入有两种可选方案。流式摄入由持续运行的 Supervisor(监督者)控制。
| 方法 | Kafka | Kinesis |
|---|---|---|
| Supervisor 类型 | kafka | kinesis |
| 工作原理 | Druid 直接从 Apache Kafka 读取数据。 | Druid 直接从 Amazon Kinesis 读取数据。 |
| 能否摄入滞后数据? | 是。 | 是。 |
| 是否保证仅处理一次(Exactly-once)? | 是。 | 是。 |
批处理
批处理摄入有两种可选方案。批处理作业与一个在作业期间运行的控制器任务(Controller task)相关联。
| 方法 | 原生批处理 | SQL |
|---|---|---|
| 控制器任务类型 | index_parallel | query_controller |
| 提交方式 | 向 Tasks API 发送 index_parallel 规范。 | 向 SQL task API 发送 INSERT 或 REPLACE 语句。 |
| 并行度 | 使用子任务(如果 maxNumConcurrentSubTasks 大于 1)。 | 使用 query_worker 子任务。 |
| 容错性 | 工作节点失败后自动重启。控制器任务失败会导致作业失败。 | 控制器或工作节点任务失败会导致作业失败。 |
| 能否追加? | 是。 | 是 (INSERT)。 |
| 能否覆盖? | 是。 | 是 (REPLACE)。 |
| 外部依赖 | 无。 | 无。 |
| 输入源 | 任何 inputSource。 | 任何 inputSource(使用 EXTERN)或 Druid 数据源(使用 FROM)。 |
| 输入格式 | 任何 inputFormat。 | 任何 inputFormat。 |
| 二级分区选项 | 提供动态、哈希和基于范围的分区方法。详细信息请参阅 partitionsSpec。 | 范围分区 (CLUSTERED BY)。 |
| 汇总模式 | 如果 tuningConfig 中的 forceGuaranteedRollup 为 true,则为完美汇总。 | 始终完美。 |