摘要:
本文是Druid配置文件系列博文的第二篇,在前一篇中介绍了Druid配置文件的组织结构,这一篇开始详细介绍各个配置文件中参数、意义、候选值等相关说明。本文主要介绍公共配置文件common.runtime.properties。
common.runtime.properties配置文件参数介绍
本文会对common.runtime.properties中的参数分组进行介绍。
1. Extensions部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.extensions.directory | 用来存放extensions相关文件的根目录,Druid将从这个目录下加载extensions | 默认值为extensions,这是一个Druid工作目录的相对路径 | 一般不修改 |
druid.extensions.hadoopDependenciesDir | hadoop依赖的根目录,用户在这个目录下存放hadoop相关依赖文件 | 默认值是hadoop-dependencies | 一般不修改 |
druid.extensions.loadList | 一个extensions的JSON数组,数组里的每项会被加载 | 默认值是null,如果这个属性没有指定,则value为null,所有extensions将会被加载,如果value设置为[],则没有extensions会被加载 | 修改为自己需要的extensions列表 |
druid.extensions.searchCurrentClassloader | 一个决定Druid是否自动搜索当前extensions的main classloader的布尔值。 | 默认是true。如果设置为false,将不自动添加classpath下的所有modules | 一般不需要 |
druid.extensions.useExtensionClassloaderFirst | 一个决定Druid extensions是否优先从自己的jar包中加载类的布尔值(而不是Druid绑定jar包)。 | 默认是false。如果设置为true,可能有版本冲突问题 | 一般不修改 |
druid.extensions.hadoopContainerDruidClasspath | 显式地设置hadoop作业的用户类路径 | 默认是null,为null时会自动计算。手动设置为了解决Druid和Hadoop之间的依赖冲突 | 一般不设置 |
druid.extensions.addExtensionsToHadoopContainer | 一个布尔值,设置为true时,druid.extensions.loadList里的extensions会被添加到Hadoop container classpath | 默认是false。这个属性只有在druid.extensions.hadoopContainerDruidClasspath 设置了的时候才生效,如果没设置,则extensions总是会添加到Hadoop container classpath | 一般不设置 |
2. Modules部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.modules.excludeList | 一个类名的JSON数组,数组里的项不应该被加载,即使它们在被加载的extensions或要被加载的核心模块中 | 默认是[] | 不需要修改 |
3.Zookeeper部分
基本设置
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.zk.paths.base | zk基本路径 | 默认是/druid | 不需要修改 |
druid.zk.service.host | zk连接的主机地址 | 默认是none,必须提供 | 必须提供 |
druid.zk.service.user | 认证用用户名 | 默认是none | 不需要设置 |
druid.zk.service.pwd | 认证用密码 | 默认是none | 不需要设置 |
druid.zk.service.authScheme | 认证schema | 只有一个可选值digest | 不需要设置 |
zk性能
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.zk.service.sessionTimeoutMs | session超时时间 | 默认30000,单位ms | 根据需求设置 |
druid.zk.service.connectionTimeoutMs | 连接超时时间 | 默认15000,单位ms | 根据需求设置 |
druid.zk.service.compress | 创建znode时是否压缩 | 默认true | 不需要设置 |
druid.zk.service.acl | 是否启用acl | 默认false。如果启用,znode创建者有所有权限 | 不需要设置 |
路径配置
推荐只设置基本配置路径,其他路径会根据基本路径生产默认路径。但是其他路径也可以使用决定路径指定。
需要设置的路径包括properties、announcements、liveSegments、loadQueue、coordinator、servedSegments。这些路径的属性为druid.zk.paths.XXXPath,路径为${druid.zk.paths.base}/XXX(XXX替换为前述的properties等)。
druid.zk.paths.indexer.XXX为indexing服务使用的zk路径。其配置方式和其他zk路径配置方式相同。
如果druid.zk.paths.base 和druid.zk.paths.indexer.base都设置了,其他的druid.zk.paths.* 或者druid.zk.paths.indexer.*都没有设置,其他属性的value将根据对应的base路径计算。例如,druid.zk.paths.base设置为/druid1,druid.zk.paths.indexer.base设置为/druid2,则druid.zk.paths.announcementsPath默认为/druid1/announcements,druid.zk.paths.indexer.announcementsPath默认为/druid2/announcements。
druid.discovery.curator.path不受base路径影响,必须单独指定。其用于服务发现。默认值是/druid/discovery,一般不需要修改。
3. Exhibitor部分
Exhibitor是zk的supervisor系统。可以对zk集群动态扩缩容,Druid能不重启的情况下更新zk列表。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.exhibitor.service.hosts | Exhibitor实例的主机名的JSON数据 | 默认为none,如果需要使用Exhibitor则必须设置该属性 | 如果需要使用Exhibitor则必须设置该属性 |
druid.exhibitor.service.port | 连接Exhibitor的REST端口号 | 默认8080 | 如果端口冲突,根据端口占用情况设置 |
druid.exhibitor.service.restUriPath | 得到server集合的REST url | 默认/exhibitor/v1/cluster/list | 一般不修改 |
druid.exhibitor.service.useSsl | 是否使用https协议 | 默认false | 一般不修改 |
druid.exhibitor.service.pollingMs | 多久拉一次列表 | 默认10000,单位ms | 一般不修改 |
druid.zk.service.host也需要设置,当Exhibitor实例不能连接的时候充当备份
4.TLS部分
略
5.认证与授权部分
略
6.启动时记录日志部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.startup.logging.logProperties | 启动时在日志中记录所有属性 | 默认false,属性包括common.runtime.properties, runtime.properties和JVM命令行参数 | 根据情况设置 |
druid.startup.logging.maskProperties | 遮住敏感信息 | 默认[“password”] | 不需要修改 |
7.请求时记录日志部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.type | 记录日志的类型 | 可选值为noop, file, emitter, slf4j, filtered, composing, switching,具体含义接下来介绍 | 必须选择一个 |
file类型
日志记录在磁盘上
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.dir | 记录日志的目录 | 默认none | 如果选择该类型一定要指定 |
druid.request.logging.filePattern | 时间格式 | 默认"yyyy-MM-dd’.log’" | 可以不修改 |
Emitter类型
日志被发射到外部位置
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.feed | 请求的feed名,与Emitting Metric部分结合学习 | 默认是none | 需要设置 |
SLF4J类型
每个请求经由SLF4J被记录,将记录在org.apache.druid.server.log.LoggingRequestLogger类下。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.setMDC | MDC实体是否应该被加入到log条目中(MDC包含的内容将在下面介绍) | 默认false | 可以修改 |
druid.request.logging.setContextMDC | context中的内容是否被添加到MDC | 默认false | 可以修改 |
MDC实体包含以下内容:queryId、sqlQueryId、dataSource、queryType、hasFilters、remoteAddr、duration、resultOrdering、descending
Filtered类型
只有查询时间得到一个阈值的请求会被发射记录。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.queryTimeThresholdMs | JSON查询的查询时间阈值 | 默认是0,也就是不做filter,单位ms | 如果使用filter需要设置 |
druid.request.logging.sqlQueryTimeThresholdMs | sql查询的查询时间阈值 | 默认是0,也就是不做filter,单位ms | 如果使用filter需要设置 |
druid.request.logging.mutedQueryTypes | 一个查询类型的列表,这些类型的查询请求不被记录 | 默认[],样例值为[“scan”, “timeBoundary”] | 按需设置 |
druid.request.logging.delegate.type | 请求loger的类型 | 默认none | 如果使用filter需要设置 |
composing类型
发射请求日志到多个logger
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.loggerProviders | 请求日志的logger列表 | 默认none | 需要设置,候选值为file, emitter, slf4j, filtered |
Switch类型
原生查询记录到一个logger,sql查询记录到另一个logger
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.request.logging.nativeQueryLogger | 原生查询logger | 默认none | 需要设置 |
druid.request.logging.sqlQueryLogger | sql查询logger | 默认none | 需要设置 |
8.Metrics部分
Druid的每个组件每隔一段时间会发射Metric,Metric包含Druid的各种信息,之后会详细介绍。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.monitoring.emissionPeriod | 发射的时间间隔 | 默认是PT1M(1分钟) | 按需设置 |
druid.monitoring.monitors | monitor列表 | 默认是none(没有监视器) | 按需添加,monitor之后会详细介绍 |
druid.emitter | Emitter类型 | 默认noop,可选值有"noop", “logging”, “http”, “parametrized”,“composing”。各候选值含义接下来会介绍。 | 按需设置 |
各种monitor
monitor名字 | 描述 |
---|
org.apache.druid.client.cache.CacheMonitor | 发射关于缓存信息的metric |
org.apache.druid.java.util.metrics.SysMonitor | 发射系统活动和状态metric |
org.apache.druid.server.metrics.HistoricalMetricsMonitor | 发射historical组件相关信息 |
org.apache.druid.java.util.metrics.JvmMonitor | JVM相关信息 |
org.apache.druid.java.util.metrics.JvmCpuMonitor | JVM的CPU消耗相关信息 |
org.apache.druid.java.util.metrics.CpuAcctDeltaMonitor | 每个cpuacct cgroup的CPU消耗信息 |
org.apache.druid.java.util.metrics.JvmThreadsMonitor | JVM线程统计信息 |
org.apache.druid.segment.realtime.RealtimeMetricsMonitor | 实时组件的统计信息 |
org.apache.druid.server.metrics.EventReceiverFirehoseMonitor | EventReceiverFirehose中有多少event在排队信息 |
org.apache.druid.server.metrics.QueryCountStatsMonitor | 查询相关信息 |
org.apache.druid.server.emitter.HttpEmittingMonitor | http发射的统计信息 |
Logging类型Emitter属性
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.emitter.logging.loggerClass | 用于记录日志的类 | 默认LoggingEmitter,可选值有HttpPostEmitter, LoggingEmitter, NoopServiceEmitter, ServiceEmitter | 一般不需要修改 |
druid.emitter.logging.logLevel | 日志级别 | 默认info,可选值有debug, info, warn, error | 按需修改 |
Http类型Emitter属性
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.emitter.http.flushMillis | 刷新时间间隔 | 默认60000(ms) | 按需修改 |
druid.emitter.http.flushCount | 刷新之前能容纳多少条信息 | 默认500 | 按需修改 |
druid.emitter.http.basicAuthentication | 认证信息 | 默认不指定,格式为admin:adminpassword | 一般不设置 |
druid.emitter.http.flushTimeOut | 刷新超时时间 | 默认不超时 | 按需修改,一般不修改 |
druid.emitter.http.batchingStrategy | 格式化策略 | 默认ARRAY,可选值有ARRAY([event1,event2])、NEWLINES(event1\nevent2)、ONLY_EVENTS(event1event2) | 按需修改 |
druid.emitter.http.maxBatchSize | 每个batch最大的size | JVM堆大小的5%和5MB中较小的值 | 按需配置,一般不修改 |
druid.emitter.http.batchQueueSizeLimit | 一个队列中最大的batch数量 | 默认2和JVM堆大小除以5MB中的最大值 | 按需配置,一般不修改 |
druid.emitter.http.minHttpTimeoutMillis | 最小http超时时间 | 默认是0,如果设置合理值是10ms到100ms | 按需配置,一般不修改 |
druid.emitter.http.recipientBaseUrl | emit的url | 默认none | 需要设置 |
对于TLS,http emitter可以使用自己的配置重写,参数为druid.emitter.http.ssl.*,这里不详细介绍,有需要可以参考Druid官网
带参数Http类型Emitter属性
druid.emitter.parametrized.httpEmitting.*与Http类型Emitter属性含义相同,这里不再介绍。如下为带参数Http类型独有属性的介绍。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.emitter.parametrized.recipientBaseUrlPattern | URL pattern | 默认none,一个例子是http://foo.bar/{feed},当feed为metrics时,将发送metric到http://foo.bar/metrics | 需要设置 |
Composing类型Emitter属性
可以同时使用上述多个类型的emitter
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.emitter.composing.emitters | emitter列表 | 默认[],例子是[“logging”,“http”] | 需要设置 |
9.元数据存储(Metadata storage
)部分
只有Coordinaor和Overlord会使用以下属性去连接元数据存储。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.metadata.storage.type | 元数据存储类型 | 默认derby,其他候选值有mysql,postgresql | 按需修改 |
druid.metadata.storage.connector.connectURI | JDBC连接数据库使用的URI | 默认none,格式为jdbc:mysql://ip:port/database_name | 需要设置 |
druid.metadata.storage.connector.user | 连接数据库的用户名 | 默认none | 需要提供 |
druid.metadata.storage.connector.password | 连接数据库的密码 | 默认none | 需要提供 |
druid.metadata.storage.connector.createTables | 如果需要一个表,这个表不存在,是否创建它 | 默认true | 一般不需要修改 |
druid.metadata.storage.tables.* | 各种用途的表名 | 默认druid_* | 一般不需要修改 |
10.深存储(Deep storage)部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.storage.type | 深存储类型 | 默认local,可选值local, noop, s3, hdfs, c* | 按需设置 |
local类型
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.storage.storageDirectory | 存储的磁盘目录 | 默认/tmp/druid/localStorage | 按需修改 |
noop类型
不需要配置
S3类型
需要druid-s3-extensions
对S3不太了解,具体配置暂时略
HDFS类型
需要druid-hdfs-storage
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.storage.storageDirectory | 存储的HDFS目录 | 默认none | 需要配置 |
Cassandra类型
需要druid-cassandra-storage
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.storage.host | Cassandra host | 默认none | 需要配置 |
druid.storage.keyspace | Cassandra key space | 默认none | |
11.Task日志部分
如果用remote模式运行indexing service,task日志不能存储在本地,只能存在 S3, Azure Blob Store, Google Cloud Storage 或HDFS。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.indexer.logs.type | Task日志类型 | 默认file,可选值noop, s3, azure, google, hdfs, file | 按需修改 |
druid.indexer.logs.kill.enabled | 是否删除旧的任务日志和元数据里任务相关的条目 | 默认false | 按需配置 |
druid.indexer.logs.kill.durationToRetain | 保留时间,在最近Xms内的日志不会被kill | 默认None | 需要配置 |
druid.indexer.logs.kill.initialDelay | overlord开启后到第一次kill任务运行的延迟 | 默认是小于5分钟的随机值 | 可以不配置 |
druid.indexer.logs.kill.delay | 执行kill任务的间隔时间 | 默认21600000(6小时) | 可以不配置 |
file类型
存储在本地文件系统
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.indexer.logs.directory | 本地文件系统目录 | 默认log | 按需修改 |
S3类型
存储在S3.需要druid-s3-extensions
具体配置略
Azure Blob Store类型
存储在Azure Blob Store,需要druid-azure-extensions,和深存储模块使用相同的账号
具体配置略
Google Cloud Storage类型
存储在Google Cloud Storage,需要druid-google-extensions
具体配置略
HDFS类型
存储在HDFS,需要druid-hdfs-storage
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.indexer.logs.directory | HDFS上的存储目录 | 默认none | 需要配置 |
12.Overlord服务发现部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.selectors.indexing.serviceName | overlord配置中的druid.service属性,通过这个配置找到overlord组件 | 默认druid/overlord | 一般不修改 |
13.Coordinator服务发现部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.selectors.coordinator.serviceName | coordinator配置中的druid.service属性,通过这个配置找到coordinator组件 | 默认druid/coordinator | 一般不修改 |
druid.announcer.segmentsPerNode | 每个znode节点包含多少个segment的信息 | 默认50 | 一般不修改 |
druid.announcer.maxBytesPerNode | 每个znode节点最大字节数 | 默认524288 | 一般不修改 |
druid.announcer.skipDimensionsAndMetrics | 是否跳过维度和指标列 | 默认false | 一般不修改 |
druid.announcer.skipLoadSpec | 是否跳过LoadSpec | 默认false | 一般不修改 |
14.JavaScript部分
Druid支持通过JavaScript动态运行时扩展
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.javascript.enabled | 是否打开JavaScript | 默认false | 按需修改 |
15.Double Column storage部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.indexing.doubleStorage | double列使用什么存储格式 | 默认double,可选值float | 一般不修改 |
16.sql兼容null处理部分
在0.13.0版本之前,’’(空字符串)和null是等价的,数字列不能是null,会被强制变为0。在0.13.0版本之后,Druid支持SQL兼容模式,允许字符串列区分’’(空字符串)和null,数组列也可以为null。
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.generic.useDefaultValueForNull | 是否使用默认值去处理null | 默认true | 改为false后会有一些存储和查询性能损失 |
17.HTTP Client部分
属性 | 含义 | 备注 | 是否需要修改 |
---|
druid.global.http.numConnections | 连接池大小,请求相同URL的数量超过这个数后会排队 | 默认20 | 按需修改 |
druid.global.http.compressionCodec | 压缩方式 | 默认gzip,可选值有identity | 按需修改 |
druid.global.http.readTimeout | 数据读超时 | 默认PT15M(15分钟) | 按需修改 |
druid.global.http.unusedConnectionTimeout | 连接池中无用连接的超时时间 | 默认PT4M,一般设置为readTimeout * 0.9 | 按需修改 |
druid.global.http.numMaxThreads | 最大线程数 | 默认max(10, ((number of cores * 17) / 16 + 2) + 30) | 按需修改 |