2020-04-07 05:30:40 -04:00
|
|
|
|
<!-- toc -->
|
2021-01-12 22:51:04 -05:00
|
|
|
|
|
|
|
|
|
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
|
|
|
|
<ins class="adsbygoogle"
|
|
|
|
|
style="display:block; text-align:center;"
|
|
|
|
|
data-ad-layout="in-article"
|
|
|
|
|
data-ad-format="fluid"
|
|
|
|
|
data-ad-client="ca-pub-8828078415045620"
|
|
|
|
|
data-ad-slot="7586680510"></ins>
|
|
|
|
|
<script>
|
|
|
|
|
(adsbygoogle = window.adsbygoogle || []).push({});
|
|
|
|
|
</script>
|
|
|
|
|
|
2020-04-07 05:30:40 -04:00
|
|
|
|
## Indexer
|
|
|
|
|
|
|
|
|
|
> [!WARNING]
|
2020-04-08 02:20:07 -04:00
|
|
|
|
> 索引器是一个可选的和[实验性](../Development/experimental.md)的功能, 其内存管理系统仍在开发中,并将在以后的版本中得到显著增强。
|
2020-04-07 05:30:40 -04:00
|
|
|
|
|
|
|
|
|
Apache Druid索引器进程是MiddleManager + Peon任务执行系统的另一种可替代选择。索引器在单个JVM进程中作为单独的线程运行任务,而不是为每个任务派生单独的JVM进程。
|
|
|
|
|
|
|
|
|
|
与MiddleManager + Peon系统相比,Indexer的设计更易于配置和部署,并且能够更好地实现跨任务的资源共享。
|
|
|
|
|
|
|
|
|
|
### 配置
|
2020-04-08 02:20:07 -04:00
|
|
|
|
对于Apache Druid Indexer进程的配置,请参见 [Indexer配置](../Configuration/configuration.md#Indexer)
|
2020-04-07 05:30:40 -04:00
|
|
|
|
|
|
|
|
|
### HTTP
|
2020-04-08 02:20:07 -04:00
|
|
|
|
Indexer进程与[MiddleManager](../Operations/api.md#MiddleManager)共用API
|
2020-04-07 05:30:40 -04:00
|
|
|
|
|
|
|
|
|
### 运行
|
2020-05-16 03:57:49 -04:00
|
|
|
|
```json
|
2020-04-07 05:30:40 -04:00
|
|
|
|
org.apache.druid.cli.Main server indexer
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 任务资源共享
|
|
|
|
|
|
|
|
|
|
以下资源在索引器进程内运行的所有任务中共享。
|
|
|
|
|
|
|
|
|
|
**查询资源**
|
|
|
|
|
查询处理线程和缓冲区在所有任务中共享。索引器将为来自所有任务共享的单个端点的查询提供服务。
|
|
|
|
|
|
2020-04-08 02:20:07 -04:00
|
|
|
|
如果启用了[查询缓存](../Configuration/configuration.md),则查询缓存也将在所有任务中共享。
|
2020-04-07 05:30:40 -04:00
|
|
|
|
|
|
|
|
|
**服务端HTTP线程**
|
|
|
|
|
索引器维护两个大小相等的HTTP线程池。
|
|
|
|
|
|
|
|
|
|
一个池专门用于Overlord和Indexer之间的任务控制消息("会话处理程序线程"), 另一个池用于处理所有其他HTTP请求。
|
|
|
|
|
|
|
|
|
|
池的大小由 `druid.server.http.numThreads` 配置配置(例如,如果设置为10,则将有10个会话处理程序线程和10个非会话处理程序线程)。
|
|
|
|
|
|
|
|
|
|
除了这两个池之外,还为查找处理分配了两个单独的线程。如果不使用查找,则不会使用这些线程。
|
|
|
|
|
|
|
|
|
|
**内存共享**
|
|
|
|
|
索引器使用 `druid.worker.globalIngestionHeapLimitBytes` 配置对其运行的所有任务施加全局堆限制。
|
|
|
|
|
|
|
|
|
|
此全局限制平均分配给 `druid.worker.capacity` 配置的任务槽数。
|
|
|
|
|
|
|
|
|
|
要应用每个任务堆的限制,索引器将覆盖任务优化配置(task tuning)中的 `maxBytesInMemory`(即忽略默认值或任何用户配置的值)。`maxRowsInMemory` 也将被重写为本质上不受限制的值:索引器不支持行限制。
|
|
|
|
|
|
|
|
|
|
默认情况下,`druid.worker.globalIngestionHeapLimitBytes` 设置为可用JVM堆的1/6。选择此默认值是为了在使用MiddleManager/Peon系统时与任务优化配置中 `maxBytesInMemory` 的默认值对齐,该系统也是JVM堆的1/6。
|
|
|
|
|
|
|
|
|
|
堆内存中保留的行的峰值使用量与任务优化配置中的 `maxBytesInMemory` 和 `maxPendingPersistent` 属性之间的交互有关。当任务在堆中保留的行数据量达到 `maxBytesInMemory` 指定的限制时,任务将持久化堆中的行数据。在持久化任务启动后,任务可以在持久化任务运行时再次摄取行数据的`maxBytesInMemory`字节。
|
|
|
|
|
|
|
|
|
|
这意味着行数据的堆使用峰值可以达到 `maxBytesInMemory *(2 + maxPendingResistent)`。 `maxPendingPersistent` 的默认值为0,允许1一个持久化任务与摄取工作同时运行。
|
|
|
|
|
|
|
|
|
|
堆的其余部分保留用于查询处理、段持久/合并操作以及其他堆使用。
|
|
|
|
|
|
|
|
|
|
**并发段持久/合并限制**
|
|
|
|
|
为了帮助减少峰值内存使用,索引器对所有正在运行的任务中并发的段持久/合并操作的数量进行了限制。
|
|
|
|
|
|
|
|
|
|
默认情况下,并发持久性/合并操作的数量限制为 `(druid.worker.capacity/2)`,四舍五入。可以使用 `druid.worker.numConcurrentMerges` 属性配置此限制。
|
|
|
|
|
|
|
|
|
|
### 当前限制
|
|
|
|
|
使用索引器时,当前不支持单独的任务日志;所有任务日志消息都将记录在索引器进程日志中。
|
|
|
|
|
|
|
|
|
|
索引器当前对每个任务施加相同的内存限制。在以后的版本中,将删除每个任务的内存限制,并且只应用全局限制。同时合并的限制也将被删除。
|
|
|
|
|
|
|
|
|
|
在以后的版本中,将动态管理每个任务的内存使用情况。请参阅 [https://github.com/apache/druid/issues/7900](https://github.com/apache/druid/issues/7900) 以了解有关索引器未来增强功能的详细信息。
|
|
|
|
|
|