Druid--Druid中Indexer Process

  • 基于apache-druid-0.17
  • Attention:Indexer是一个可选的实验性特性。它的内存管理系统仍在开发中,并将在以后的版本中得到显著增强。
  • Apache Druid Indexer进程是 MiddleManager + Peon任务执行系统的替代方案。Indexer不是为每个任务创建单独的JVM进程,而是在单个JVM进程中作为单独的线程运行任务。
  • 与MiddleManager + Peon系统相比,Indexer设计得更易于配置和部署,并更好地支持任务间的资源共享。
  • 配置文件和api接口详见官方文档。

启动命令

org.apache.druid.cli.Main server indexer

task资源共享

  • 以下资源在Indexer进程中运行的所有任务之间共享。

Query资源

  • 查询处理线程和缓冲区在所有任务之间共享。Indexer将为所有任务共享的单个端点提供查询。
  • 如果启用了查询缓存,那么还可以在所有任务之间共享查询缓存。

服务器的HTTP线程

  • Indexer维护两个大小相等的HTTP线程池。
  • 一个线程池专门用于Overlord和Indexer之间的任务控制消息(“chat handler threads”)。另一个池用于处理所有其他HTTP请求。
  • 池的大小由druid.server.http.numThreads配置。numThreads配置(例如,如果将其设置为10,则将有10个聊天处理程序线程和10个非聊天处理程序线程)。
  • 除了这两个池之外,还为查找处理分配了两个单独的线程。如果不使用查找,就不会使用这些线程。

内存共享

  • Indexer使用配置druid.worker.globalIngestionHeapLimitBytes对所运行的任务加全局堆限制。
  • 这个全局限制是由druid.worker.capacity配置的任务槽的数量平均分配的。
  • 要应用每个任务堆(heap)的限制,Indexer将在任务调优配置中覆盖maxBytesInMemory(即,忽略默认值或任何用户配置的值)。maxRowsInMemory也将被覆盖到一个实质上不受限制的值:索引器不支持行限制。
  • 默认情况下:druid.worker.globalIngestionHeapLimitBytes设定为JVM堆内存的1/6;选择此默认值是为了在使用MiddleManager/Peon系统(也占JVM堆的1/6)时,与任务调优配置中的maxBytesInMemory的默认值保持一致。
  • 堆内存中保存的原始数据的峰值使用量与任务调优配置中的maxBytesInMemorymaxpendingpersist属性之间的交互有关。当任务在堆中保存的原始数据量达到maxBytesInMemory指定的限制时,任务将持久化堆中的行数据。在persist启动后,任务可以在运行persist时再次读取maxBytesInMemory字节数的原始数据。
  • 这意味着,原始数据的堆内峰值使用量可以达到maxBytesInMemory * (2 + maxpendingpersist)maxpendingpersist的默认值是0,这允许一个persist与数据提取工作并发运行。
  • 堆的其余部分用于查询处理和段持久化/合并操作,以及其他堆的使用。

并发Segment缓存和合并限制

  • 为了帮助降低峰值内存使用量,Indexer对所有运行任务的并发Segment
    perstis/merge 操作的数量施加了限制。
  • 默认情况下,并发Segment的 perstis/merge 操作的数量限制为(druid.worker.capacity / 2),四舍五入。参数配置druid.worker.numConcurrentMerges

当前限制

  • 使用Indexer时,当前不支持单独的任务日志;所有任务日志消息都将记录在Indexer进程日志中。
  • Indexer当前对每个任务施加相同的内存限制。在以后的版本中,将删除每个任务的内存限制,只应用全局限制。并发合并的限制也将被取消。
  • 在以后的版本中,每个任务的内存使用将被动态管理。详见:https://github.com/apache/druid/issues/7900

你可能感兴趣的:(Druid--Druid中Indexer Process)