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