druid-docs-cn/Design/Indexer.md

67 lines
3.9 KiB
Markdown
Raw Normal View History

2020-04-07 05:30:40 -04:00
<!-- toc -->
## Indexer
> [!WARNING]
> 索引器是一个可选的和[实验性]()的功能, 其内存管理系统仍在开发中,并将在以后的版本中得到显著增强。
Apache Druid索引器进程是MiddleManager + Peon任务执行系统的另一种可替代选择。索引器在单个JVM进程中作为单独的线程运行任务而不是为每个任务派生单独的JVM进程。
与MiddleManager + Peon系统相比Indexer的设计更易于配置和部署并且能够更好地实现跨任务的资源共享。
### 配置
对于Apache Druid Indexer进程的配置请参见 [Indexer配置]()
### HTTP
Indexer进程与[MiddleManager]()共用API
### 运行
```
org.apache.druid.cli.Main server indexer
```
### 任务资源共享
以下资源在索引器进程内运行的所有任务中共享。
**查询资源**
查询处理线程和缓冲区在所有任务中共享。索引器将为来自所有任务共享的单个端点的查询提供服务。
如果启用了[查询缓存](),则查询缓存也将在所有任务中共享。
**服务端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) 以了解有关索引器未来增强功能的详细信息。