구성 레퍼런스
구성 레퍼런스 (Configuration reference)
Apache Druid의 각 서비스 타입별 모든 구성 속성을 다루는 레퍼런스 문서예요. 권장 파일 구성, 값 보간(interpolation), 공통 구성, 그리고 Coordinator·Overlord·Broker·Historical 등 서비스별 구성을 설명합니다.
출처: 문서
본문
이 페이지는 각 Druid 서비스 타입의 모든 구성 속성을 문서화합니다.
권장 구성 파일 구성
Druid 구성 파일을 구성하는 권장 방식은 Druid 패키지 루트의 conf 디렉터리에서 볼 수 있습니다. 아래와 같습니다.
$ ls -R conf
druid
conf/druid:
_common broker coordinator historical middleManager overlord
conf/druid/_common:
common.runtime.properties log4j2.xml
conf/druid/broker:
jvm.config runtime.properties
conf/druid/coordinator:
jvm.config runtime.properties
conf/druid/historical:
jvm.config runtime.properties
conf/druid/middleManager:
jvm.config runtime.properties
conf/druid/overlord:
jvm.config runtime.properties
각 디렉터리에는 해당 디렉터리에 대응하는 특정 Druid 서비스(예: historical)의 구성 속성을 담은 runtime.properties 파일이 있습니다.
jvm.config 파일은 각 서비스의 힙 크기 속성 같은 JVM 플래그를 담고 있습니다.
모든 서비스가 공유하는 공통 속성은 _common/common.runtime.properties에 넣습니다.
구성 보간 (Configuration interpolation)
구성 값은 System Properties, 환경 변수, 또는 로컬 파일에서 보간할 수 있습니다. 아래는 사용 예시입니다.
druid.metadata.storage.type=${env:METADATA_STORAGE_TYPE}
druid.processing.tmpDir=${sys:java.io.tmpdir}
druid.segmentCache.locations=${file:UTF-8:/config/segment-cache-def.json}
보간은 재귀적이기도 해서 이렇게 할 수 있습니다.
druid.segmentCache.locations=${file:UTF-8:${env:SEGMENT_DEF_LOCATION}}
속성이 설정되지 않으면 시작 시 예외가 발생하지만, 원한다면 기본값을 제공할 수 있습니다. 파일 보간에서는 파일이 존재하지 않으면 예외가 발생하므로 기본값 설정이 동작하지 않아요.
druid.metadata.storage.type=${env:METADATA_STORAGE_TYPE:-mysql}
druid.processing.tmpDir=${sys:java.io.tmpdir:-/tmp}
${...}로 감싸져 있는 변수를 설정해야 하는데 보간되기를 원하지 않는다면 $를 하나 더 추가해 이스케이프할 수 있습니다. 예를 들어:
config.name=$${value}
공통 구성 (Common configurations)
이 섹션의 속성들은 클러스터의 모든 Druid 서비스가 공유해야 하는 공통 구성입니다.
JVM 구성 모범 사례
모든 서비스에 설정하는 JVM 파라미터는 네 가지입니다.
-Duser.timezone=UTC: JVM의 기본 시간대를 UTC로 설정합니다. 우리는 항상 이 값을 설정하며 다른 기본 시간대로는 테스트하지 않으므로, 로컬 시간대가 동작할 수도 있지만 이상하고 흥미로운 버그를 드러낼 수도 있어요. non-UTC 시간대로 쿼리를 발행하려면 query granularities를 참고하세요.-Dfile.encoding=UTF-8: 시간대와 비슷하게, 우리는 UTF-8을 가정하고 테스트합니다. 로컬 인코딩이 동작할 수도 있지만 이상하고 흥미로운 버그가 생길 수도 있습니다.-Djava.io.tmpdir=<a path>: Druid의 다양한 부분이 임시 파일을 사용해 파일 시스템과 상호작용합니다. 이 파일들은 꽤 커질 수 있습니다. 즉/tmp디렉터리가 작은 시스템은 Druid에 문제를 일으킬 수 있다는 뜻입니다. 따라서 JVM tmp 디렉터리를 공간이 충분한 위치로 설정하세요.
JVM tmp 디렉터리를 구성할 때 다음도 고려하세요.
-
temp 디렉터리는 휘발성인 tmpfs여야 하지 않습니다.
-
이 디렉터리는 읽기·쓰기 속도도 좋아야 합니다.
-
NFS 마운트는 피하세요.
-
org.apache.druid.java.util.metrics.SysMonitor는java.io.tmpdir의 파일에 대해 실행 권한을 요구합니다. 시스템 모니터를 사용한다면java.io.tmpdir을noexec로 설정하지 마세요. -
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager: 이렇게 하면 표준 Java 로깅을 사용하는 (jetty 같은) non-log4j2 컴포넌트의 로그를 log4j2가 처리할 수 있습니다.
Extensions
Druid의 외부 의존성 상당수는 모듈로 플러그인할 수 있습니다. 확장은 다음 구성으로 제공할 수 있어요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.extensions.directory | 사용자가 확장 관련 파일을 넣을 수 있는 루트 확장 디렉터리. Druid는 이 디렉터리 아래에 저장된 확장을 로드합니다. | extensions (Druid 작업 디렉터리에 대한 상대 경로) |
| druid.extensions.loadList | Druid가 확장 디렉터리에서 로드할 확장의 JSON 배열. 지정하지 않으면 값이 null이 되고 Druid는 druid.extensions.directory 아래의 모든 확장을 로드합니다. 값이 빈 목록 []이면 확장이 전혀 로드되지 않습니다. 또한 공통 확장 디렉터리에 저장되지 않은 다른 커스텀 확장의 절대 경로를 지정하는 것도 허용됩니다. |
null |
| druid.extensions.searchCurrentClassloader | Druid가 확장을 위해 메인 클래스로더를 검색할지 결정하는 boolean 플래그. 기본값은 true이지만, 클래스패스의 모든 모듈을 자동으로 추가하지 않을 이유가 있다면 끌 수 있습니다. | true |
| druid.extensions.useExtensionClassloaderFirst | Druid 확장이 Druid와 함께 번들된 jar보다 자신의 jar에서 클래스를 로드하는 것을 선호할지 결정하는 boolean 플래그. false이면 확장은 Druid와 함께 번들된 jar가 제공하는 클래스와 호환되어야 합니다. true이면 확장이 충돌하는 버전에 의존할 수 있습니다. | false |
Modules
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.modules.excludeList | druid.extensions.loadList로 지정된 확장이나 특정 Druid 서비스 타입에서 로드하도록 지정된 코어 모듈 목록에 있어도 로드되지 않아야 할 모듈 클래스의 정규 클래스 이름(예: "org.apache.druid.somepackage.SomeModule")의 JSON 배열. 어떤 유용한 확장이 어떤 서비스 타입에서 로드되어서는 안 되는 모듈을 포함하는데, 그 모듈의 일부 의존성이 충족되지 못했을 때 유용합니다. |
[] |
ZooKeeper
기본 ZK 경로와 ZK 서비스 호스트만 설정할 것을 권장하지만, Druid가 사용하는 모든 ZK 경로는 절대 경로로 덮어쓸 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.zk.paths.base | 기본 ZooKeeper 경로. | /druid |
| druid.zk.service.host | 연결할 ZooKeeper 호스트. 필수 속성이라 호스트 주소가 제공되어야 합니다. | none |
| druid.zk.service.user | ZooKeeper로 인증할 사용자 이름. 선택 속성. | none |
| druid.zk.service.pwd | ZooKeeper로 인증할 Password Provider 또는 문자열 비밀번호. 선택 속성. | none |
| druid.zk.service.authScheme | 지원되는 유일한 인증 스킴은 digest입니다. |
digest |
ZooKeeper 동작
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.zk.service.sessionTimeoutMs | ZooKeeper 세션 타임아웃 (밀리초). | 30000 |
| druid.zk.service.connectionTimeoutMs | ZooKeeper 연결 타임아웃 (밀리초). | 15000 |
| druid.zk.service.compress | 생성된 Znode를 압축할지 여부에 대한 boolean 플래그. | true |
| druid.zk.service.acl | ZooKeeper ACL 보안을 활성화할지 여부에 대한 boolean 플래그. ACL이 활성화되면 zNode 생성자는 모든 권한을 갖습니다. | false |
| druid.zk.service.pathChildrenCacheStrategy | 서비스 공지를 위한 기본 캐싱 전략을 결정합니다. true로 설정하면 announcer가 Apache Curator의 PathChildrenCache 전략을 사용하고, 그렇지 않으면 NodeCache 전략을 사용합니다. 클러스터에 엄청난 수의 ZooKeeper watch를 다룰 때는 NodeCache 전략 사용을 고려하세요. | true |
경로 구성 (Path configuration)
Druid는 표준 경로 구성 집합을 통해 ZooKeeper와 상호작용합니다. 기본 ZooKeeper 경로만 설정할 것을 권장하지만, Druid가 사용하는 모든 ZooKeeper 경로는 절대 경로로 덮어쓸 수 있어요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.zk.paths.base | 기본 ZooKeeper 경로. | /druid |
| druid.zk.paths.propertiesPath | ZooKeeper properties 경로. | ${druid.zk.paths.base}/properties |
| druid.zk.paths.announcementsPath | Druid 서비스 공지 경로. | ${druid.zk.paths.base}/announcements |
| druid.zk.paths.liveSegmentsPath | Druid 서비스가 세그먼트를 공지하는 현재 경로. | ${druid.zk.paths.base}/segments |
| druid.zk.paths.coordinatorPath | Coordinator가 리더 선출에 사용. | ${druid.zk.paths.base}/coordinator |
인덱싱 서비스도 자체 경로 집합을 사용합니다. 이 구성은 공통 구성에 포함할 수 있어요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.zk.paths.indexer.base | 기본 ZooKeeper 경로 | ${druid.zk.paths.base}/indexer |
| druid.zk.paths.indexer.announcementsPath | Middle Manager가 여기에 자신을 공지합니다. | ${druid.zk.paths.indexer.base}/announcements |
| druid.zk.paths.indexer.tasksPath | Middle Manager에 태스크를 할당하는 데 사용. | ${druid.zk.paths.indexer.base}/tasks |
| druid.zk.paths.indexer.statusPath | 태스크 상태 공지의 부모 경로. | ${druid.zk.paths.indexer.base}/status |
druid.zk.paths.base와 druid.zk.paths.indexer.base가 모두 설정되고, 다른 druid.zk.paths.* 또는 druid.zk.paths.indexer.* 값이 하나도 설정되지 않으면, 다른 속성들은 각자의 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로 기본값이 정해집니다.
다음 경로는 서비스 발견(service discovery)에 사용됩니다. 이것은 druid.zk.paths.base의 영향을 받지 않으며 별도로 지정해야 해요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.discovery.curator.path | 서비스가 이 ZooKeeper 경로 아래에 자신을 공지합니다. | /druid/discovery |
TLS
일반 구성
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.enablePlaintextPort | HTTP 커넥터 활성화/비활성화. | true |
| druid.enableTlsPort | HTTPS 커넥터 활성화/비활성화. | false |
권장되지는 않지만 HTTP와 HTTPS 커넥터를 동시에 활성화할 수 있으며, 각 서비스의 druid.plaintextPort와 druid.tlsPort 속성으로 각각의 포트를 구성할 수 있습니다. 이 포트들의 유효 값과 기본값을 확인하려면 개별 서비스의 Configuration 섹션을 보세요.
Jetty 서버 TLS 구성
Druid는 임베디드 웹 서버로 Jetty를 사용합니다. TLS/SSL, 인증서, 관련 개념(아래 구성 설정의 설명 포함)에 대해 더 알려면 Jetty Operations Guide의 "Configuring SSL/TLS KeyStores"를 참고하세요. Java의 TLS/SSL 지원에 대한 일반적인 정보는 Java Secure Socket Extension (JSSE) Reference Guide를 참고하세요. JDK 17용 Java Cryptography Architecture Standard Algorithm Name Documentation은 아래 속성들의 가능한 모든 값을 나열합니다.
| 속성 | 설명 | 기본값 | 필수 |
|---|---|---|---|
| druid.server.https.keyStorePath | TLS/SSL KeyStore의 파일 경로 또는 URL. | none | 예 |
| druid.server.https.keyStoreType | KeyStore의 타입. | none | 예 |
| druid.server.https.certAlias | 커넥터용 TLS/SSL 인증서의 별칭. | none | 예 |
| druid.server.https.keyStorePassword | KeyStore용 Password Provider 또는 문자열 비밀번호. | none | 예 |
다음 표는 필수가 아닌 고급 구성 옵션이며, 주의해서 사용하세요.
| 속성 | 설명 | 기본값 | 필수 |
|---|---|---|---|
| druid.server.https.keyManagerFactoryAlgorithm | KeyManager 생성에 사용할 알고리즘. 자세한 내용은 여기를 참고하세요. | javax.net.ssl.KeyManagerFactory.getDefaultAlgorithm() | 아니요 |
| druid.server.https.keyManagerPassword | Key Manager용 Password Provider 또는 문자열 비밀번호. | none | 아니요 |
| druid.server.https.includeCipherSuites | 포함할 cipher suite 이름 목록. 정확한 cipher suite 이름이나 정규식을 사용할 수 있습니다. | Jetty의 기본 include cipher 목록 | 아니요 |
| druid.server.https.excludeCipherSuites | 제외할 cipher suite 이름 목록. 정확한 cipher suite 이름이나 정규식을 사용할 수 있습니다. | Jetty의 기본 exclude cipher 목록 | 아니요 |
| druid.server.https.includeProtocols | 포함할 정확한 프로토콜 이름 목록. | Jetty의 기본 include protocol 목록 | 아니요 |
| druid.server.https.excludeProtocols | 제외할 정확한 프로토콜 이름 목록. | Jetty의 기본 exclude protocol 목록 | 아니요 |
내부 클라이언트 TLS 구성 (simple-client-sslcontext 확장 필요)
이 속성들은 Druid 서비스가 서로 통신할 때 사용하는 내부 HTTP 클라이언트에 제공될 SSLContext에 적용됩니다. 이 속성들은 simple-client-sslcontext 확장이 로드되어 있어야 합니다. 그렇지 않으면 TLS가 활성화되었을 때 Druid 서비스가 서로 통신할 수 없습니다.
| 속성 | 설명 | 기본값 | 필수 |
|---|---|---|---|
| druid.client.https.protocol | 사용할 SSL 프로토콜. | TLSv1.2 | 아니요 |
| druid.client.https.trustStoreType | 신뢰된 루트 인증서가 저장되는 키 저장소의 타입. | java.security.KeyStore.getDefaultType() | 아니요 |
| druid.client.https.trustStorePath | 신뢰된 루트 인증서가 저장되는 TLS/SSL 키 저장소의 파일 경로 또는 URL. | none | 예 |
| druid.client.https.trustStoreAlgorithm | TrustManager가 인증서 체인을 검증하는 데 사용할 알고리즘. | javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm() | 아니요 |
| druid.client.https.trustStorePassword | Trust Store용 Password Provider 또는 문자열 비밀번호. | none | 예 |
이 문서는 위 구성의 가능한 모든 값을 나열합니다.
인증 및 권한 부여
| 속성 | 타입 | 설명 | 기본값 | 필수 |
|---|---|---|---|---|
| druid.auth.authenticatorChain | JSON 문자열 목록 | Authenticator 타입 이름 목록 | ["allowAll"] | 아니요 |
| druid.escalator.type | String | 내부 Druid 통신에 사용해야 하는 Escalator의 타입. 이 Escalator는 druid.auth.authenticatorChain의 Authenticator가 지원하는 인증 스킴을 사용해야 합니다. |
noop | 아니요 |
| druid.auth.authorizers | JSON 문자열 목록 | Authorizer 타입 이름 목록 | ["allowAll"] | 아니요 |
| druid.auth.unsecuredPaths | 문자열 목록 | 보안 검사를 수행하지 않을 경로 목록. 이 경로에 대한 모든 요청이 허용됩니다. | [] | 아니요 |
| druid.auth.allowUnauthenticatedHttpOptions | Boolean | true이면 HTTP OPTIONS 요청에 대한 인증 검사를 건너뜁니다. CORS pre-flight 요청 지원 같은 특정 유스케이스에 필요합니다. OPTIONS 요청에 대한 인증 검사를 비활성화하면 비인증 사용자가 (OPTIONS 요청이 404 대신 200을 반환하는지 확인해) 어떤 Druid 엔드포인트가 유효한지 알 수 있게 되므로, 이 옵션을 활성화하면 서버 구성에 대한 정보(그 확장이 엔드포인트를 추가한다면 어떤 확장이 로드되었는지에 대한 정보 포함)가 드러날 수 있음에 유의하세요. | false | 아니요 |
자세한 내용은 Authentication and Authorization을 참고하세요. 특정 auth 확장의 구성 옵션은 해당 확장 문서를 참고하세요.
시작 로깅 (Startup logging)
모든 서비스는 시작 시 디버깅 정보를 로깅할 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.startup.logging.logProperties | 시작 시 (common.runtime.properties, runtime.properties, JVM 커맨드 라인에서) 모든 속성을 로깅합니다. | false |
| druid.startup.logging.maskProperties | 이 단어들을 포함한 민감 속성(예: 비밀번호)을 마스킹합니다. | ["password"] |
이 설정을 활성화하면 일부 민감한 정보가 기록될 수 있음에 유의하세요.
요청 로깅 (Request logging)
쿼리를 서비스할 수 있는 모든 서비스는 자신이 받는 쿼리 요청도 기록할 수 있습니다. Broker 서비스는 (HTTP와 JDBC 양쪽에서) 받는 SQL 요청도 추가로 기록할 수 있습니다. 요청 로깅 설정 예시는 Request logging을 참고하세요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.type | 모든 쿼리 요청을 기록하는 방법. 선택지: noop, file, emitter, slf4j, filtered, composing, switching | noop (기본적으로 요청 로깅 비활성화) |
모든 HTTP 요청을 로그로 보내려면 org.apache.druid.jetty.RequestLog를 DEBUG 레벨로 설정하세요. 자세한 내용은 Logging을 참고하세요.
파일 요청 로깅
파일 요청 로거는 일별 요청 로그를 디스크에 저장합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.dir | Historical, Realtime, Broker 서비스는 받는 모든 요청의 요청 로그를 유지합니다(POST로 상호작용하므로 일반 요청 로그는 실제 쿼리에 대한 정보를 보통 포착하지 않습니다). 이것은 요청 로그를 저장할 디렉터리를 지정합니다. | none |
| druid.request.logging.filePattern | 각 파일의 Joda datetime 형식. | "yyyy-MM-dd'.log'" |
| druid.request.logging.durationToRetain | 요청 로그를 디스크에 보관하는 기간. 기간은 롤 기간(roll period)만큼 길어야 합니다. | none |
| druid.request.logging.rollPeriod | 요청 로그의 로그 회전 기간을 정의합니다. 기간은 최소 PT1H여야 합니다. 1일보다 작은 기간에는 파일 패턴으로 "yyyy-MM-dd-HH'.log'"를 사용하는 것이 좋습니다. |
P1D |
요청 로그의 형식은 TSV이며 요청당 한 줄로 다섯 개 필드를 가집니다: timestamp, remote_addr, native_query, query_context, sql_query.
네이티브 JSON 요청의 경우 sql_query 필드는 비어 있습니다. 예를 들어:
2019-01-14T10:00:00.000Z 127.0.0.1 {"queryType":"topN","dataSource":{"type":"table","name":"wikiticker"},"virtualColumns":[],"dimension":{"type":"LegacyDimensionSpec","dimension":"page","outputName":"page","outputType":"STRING"},"metric":{"type":"LegacyTopNMetricSpec","metric":"count"},"threshold":10,"intervals":{"type":"LegacySegmentSpec","intervals":["2015-09-12T00:00:00.000Z/2015-09-13T00:00:00.000Z"]},"filter":null,"granularity":{"type":"all"},"aggregations":[{"type":"count","name":"count"}],"postAggregations":[],"context":{"queryId":"74c2d540-d700-4ebd-b4a9-3d02397976aa"},"descending":false} {"query/time":100,"query/bytes":800,"success":true,"identity":"user1"}
SQL 쿼리 요청의 경우 native_query 필드는 비어 있습니다. 예를 들어:
2019-01-14T10:00:00.000Z 127.0.0.1 {"sqlQuery/time":100, "sqlQuery/planningTimeMs":10, "sqlQuery/bytes":600, "success":true, "identity":"user1"} {"query":"SELECT page, COUNT(*) AS Edits FROM wikiticker WHERE TIME_IN_INTERVAL(\"__time\", '2015-09-12/2015-09-13') GROUP BY page ORDER BY Edits DESC LIMIT 10","context":{"sqlQueryId":"c9d035a0-5ffd-4a79-a865-3ffdadbb5fdd","nativeQueryIds":"[490978e4-f5c7-4cf6-b174-346e63cf8863]"}}
Emitter 요청 로깅
emitter 요청 로거는 emitter 구성에 지정된 외부 위치로 모든 요청을 내보냅니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.feed | 요청의 피드(feed) 이름. | none |
SLF4J 요청 로깅
slf4j 요청 로거는 SLF4J를 사용해 모든 요청을 기록합니다. SLF4J 형식 스펙과 무관하게 로그 메시지에서 네이티브 쿼리를 JSON으로 직렬화합니다. 요청은 org.apache.druid.server.log.LoggingRequestLogger 클래스 아래에 기록됩니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.setMDC | 로그 항목 안에 MDC 항목을 설정하려면 이 값을 true로 설정하세요. 이 데이터를 형식화하려면 로깅 시스템이 MDC를 지원하도록 구성되어 있어야 합니다. | false |
| druid.request.logging.setContextMDC | Druid 쿼리 컨텍스트를 MDC 항목에 추가하려면 "true"로 설정합니다. setMDC가 true일 때만 적용됩니다. |
false |
네이티브 쿼리에 대해 setMDC가 true일 때는 다음 MDC 필드가 채워집니다.
| MDC 필드 | 설명 |
|---|---|
| queryId | 쿼리 ID |
| sqlQueryId | 이 쿼리가 SQL 요청의 일부라면 SQL 쿼리 ID |
| dataSource | 쿼리가 대상을 삼은 데이터소스 |
| queryType | 쿼리의 타입 |
| hasFilters | 쿼리에 필터가 있는지 여부 |
| remoteAddr | 요청 클라이언트의 원격 주소 |
| duration | 쿼리 간격의 기간 |
| resultOrdering | 결과의 정렬(ordering) |
| descending | 쿼리가 내림차순 쿼리인지 여부 |
Filtered 요청 로깅
filtered 요청 로거는 쿼리 타입 또는 쿼리 완료 시간에 따라 요청을 필터링합니다. 네이티브 쿼리의 경우 queryTimeThresholdMs에 제공된 임계값을 query/time 메트릭이 초과할 때만 요청을 기록합니다. SQL 쿼리의 경우 sqlQueryTimeThresholdMs에 제공된 임계값을 sqlQuery/time 메트릭이 초과할 때만 기록합니다. 쿼리 메트릭에 대한 자세한 내용은 Metrics를 참고하세요.
임계값을 충족하는 요청은 druid.request.logging.delegate.type에 설정된 요청 로거 타입으로 기록됩니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.queryTimeThresholdMs | query/time 메트릭의 밀리초 단위 임계값. |
0, 즉 필터링 없음 |
| druid.request.logging.sqlQueryTimeThresholdMs | sqlQuery/time 메트릭의 밀리초 단위 임계값. |
0, 즉 필터링 없음 |
| druid.request.logging.mutedQueryTypes | 이 타입의 쿼리 요청은 기록하지 않습니다. 쿼리 타입은 Druid의 네이티브 JSON 쿼리 API에서 지정된 쿼리의 "queryType" 값에 대응하는 문자열 객체로 정의됩니다. 철자가 틀린 쿼리 타입은 무시됩니다. scan과 timeBoundary 쿼리를 무시하는 예시: ["scan", "timeBoundary"] |
[] |
| druid.request.logging.delegate.type | 요청을 기록할 위임(request logger) 요청 로거의 타입. | none |
Composing 요청 로깅
composing 요청 로거는 요청 로그를 여러 요청 로거로 내보냅니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.loggerProviders | 요청 로그를 내보내기 위한 요청 로거 목록. | none |
Switching 요청 로깅
switching 요청 로거는 네이티브 쿼리 요청 로그를 한 요청 로거로, SQL 쿼리 요청 로그를 다른 요청 로거로 라우팅합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.request.logging.nativeQueryLogger | 네이티브 쿼리 요청 로그를 내보내기 위한 요청 로거. | none |
| druid.request.logging.sqlQueryLogger | SQL 쿼리 요청 로그를 내보내기 위한 요청 로거. | none |
감사 로깅 (Audit logging)
Coordinator와 Overlord는 감사를 위해 lookup, 세그먼트 로드/드롭 규칙, 동적 구성 변경을 기록합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.audit.manager.type | 감사된 이벤트 처리에 사용되는 감사 관리자 타입. log로 설정하면 감사 이벤트가 기록되고 sql로 설정하면 메타데이터 스토어에 저장됩니다. |
sql |
| druid.audit.manager.logLevel | 가능한 값이 DEBUG, INFO, WARN인 감사 이벤트의 로그 레벨. 이 속성은 druid.audit.manager.type이 log로 설정된 경우에만 사용됩니다. |
INFO |
| druid.audit.manager.auditHistoryMillis | 감사 기록을 쿼리하는 기본 기간. | 1 week |
| druid.audit.manager.includePayloadAsDimensionInMetric | 서비스 메트릭에 payload 컬럼을 추가할지 여부에 대한 boolean 플래그. | false |
| druid.audit.manager.maxPayloadSizeBytes | Druid의 메타데이터 스토어 감사 테이블에 저장할 감사 페이로드의 최대 크기. 감사 페이로드 크기가 이 값을 초과하면 페이로드가 생략되었음을 나타내는 메시지와 함께 감사 로그가 저장됩니다. maxPayloadSizeBytes를 -1(기본값)로 설정하면 이 검사를 비활성화해, Druid가 크기와 무관하게 항상 감사 페이로드를 저장하게 됩니다. -1이 아닌 다른 음수로 설정하는 것은 유효하지 않습니다. 사람이 읽을 수 있는 형식을 지원합니다(여기 참고). |
-1 |
| druid.audit.manager.skipNullField | true이면 메타데이터 스토어에 저장된 감사 페이로드에서 null 값을 가진 필드를 제외합니다. | false |
메타데이터 스토리지 (Metadata storage)
이 속성들은 JDBC 연결과 메타데이터 스토리지 주변의 다른 구성을 지정합니다. 이 속성들로 메타데이터 스토리지에 연결하는 서비스는 Coordinator와 Overlord뿐입니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.metadata.storage.type | 사용할 메타데이터 스토리지 타입. mysql, postgresql, derby 중 하나. |
derby |
| druid.metadata.storage.connector.connectURI | 연결할 데이터베이스의 JDBC URI | none |
| druid.metadata.storage.connector.user | 연결할 사용자 이름. | none |
| druid.metadata.storage.connector.password | 연결에 사용되는 Password Provider 또는 문자열 비밀번호. | none |
| druid.metadata.storage.connector.createTables | Druid가 테이블을 요구하는데 존재하지 않으면 생성할까요? | true |
| druid.metadata.storage.tables.base | 테이블의 기본 이름. | druid |
| druid.metadata.storage.tables.dataSource | Kafka Indexing Service가 만든 데이터소스를 찾는 데 사용할 테이블. | druid_dataSource |
| druid.metadata.storage.tables.pendingSegments | pending 세그먼트를 찾는 데 사용할 테이블. | druid_pendingSegments |
| druid.metadata.storage.tables.segments | 세그먼트를 찾는 데 사용할 테이블. | druid_segments |
| druid.metadata.storage.tables.rules | 세그먼트 로드/드롭 규칙을 찾는 데 사용할 테이블. | druid_rules |
| druid.metadata.storage.tables.config | 구성(config)을 찾는 데 사용할 테이블. | druid_config |
| druid.metadata.storage.tables.indexingStates | 인덱싱 상태 페이로드와 지문(fingerprint)을 저장하는 테이블. | druid_indexingStates |
| druid.metadata.storage.tables.tasks | 인덱싱 서비스가 태스크를 저장하는 데 사용. | druid_tasks |
| druid.metadata.storage.tables.taskLog | 인덱싱 서비스가 태스크 로그를 저장하는 데 사용. | druid_tasklogs |
| druid.metadata.storage.tables.taskLock | 인덱싱 서비스가 태스크 잠금을 저장하는 데 사용. | druid_tasklocks |
| druid.metadata.storage.tables.supervisors | 인덱싱 서비스가 supervisor 구성을 저장하는 데 사용. | druid_supervisors |
| druid.metadata.storage.tables.audit | Coordinator 규칙 같은 구성 변경의 감사 기록에 사용할 테이블. | druid_audit |
| druid.metadata.storage.tables.useShortIndexNames | 모든 인덱스가 생성되도록 SHA 기반 고유 인덱스 이름을 사용할지 여부. | false |
딥 스토리지 (Deep storage)
이 구성은 세그먼트를 딥 스토리지에서 푸시하고 풀하는 방법에 관한 것입니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.storage.type | 사용할 딥 스토리지 타입. local, noop, s3, hdfs, c* 중 하나. |
local |
로컬 딥 스토리지
로컬 딥 스토리지는 로컬 파일 시스템을 사용합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.storage.storageDirectory | 딥 스토리지로 사용할 디스크의 디렉터리. | /tmp/druid/localStorage |
Noop 딥 스토리지
이 딥 스토리지는 아무것도 하지 않습니다. 구성이 없습니다.
S3 딥 스토리지
이 딥 스토리지는 Amazon의 S3와 상호작용하는 데 사용됩니다. druid-s3-extensions 확장을 로드해야 합니다. 아래 표는 S3의 몇 가지 중요한 구성을 보여줍니다. 전체 구성은 S3 Deep Storage를 참고하세요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.storage.bucket | S3 bucket 이름. | none |
| druid.storage.baseKey | 스토리지용 S3 객체 키 접두어. | none |
| druid.storage.disableAcl | ACL용 boolean 플래그. false로 설정하면 bucket 소유자에게 전체 제어 권한이 부여됩니다. 추가 권한을 설정해야 할 수 있습니다. S3 permissions settings를 참고하세요. | false |
| druid.storage.archiveBucket | archive 태스크를 실행할 때 아카이빙용 S3 bucket 이름. | none |
| druid.storage.archiveBaseKey | 아카이빙용 S3 객체 키 접두어. | none |
| druid.storage.sse.type | 서버 측 암호화 타입. s3, kms, custom 중 하나여야 합니다. 자세한 내용은 아래 Server-side encryption 섹션을 참고하세요. |
None |
| druid.storage.sse.kms.keyId | AWS KMS key ID. druid.storage.sse.type이 kms일 때만 사용되며, 기본 key ID를 사용하려면 비워둘 수 있습니다. |
None |
| druid.storage.sse.custom.base64EncodedKey | Base64 인코딩된 키. druid.storage.sse.type이 custom이면 지정해야 합니다. |
None |
HDFS 딥 스토리지
이 딥 스토리지는 HDFS와 상호작용하는 데 사용됩니다. druid-hdfs-storage 확장을 로드해야 합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.storage.storageDirectory | 딥 스토리지로 사용할 HDFS 디렉터리. | none |
| druid.storage.compressionFormat | HDFS에 업로드되는 세그먼트에 적용되는 압축 형식. zip과 lz4만 지원됩니다. |
zip |
Cassandra 딥 스토리지
이 딥 스토리지는 Cassandra와 상호작용하는 데 사용됩니다. druid-cassandra-storage 확장을 로드해야 합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.storage.host | Cassandra 호스트. | none |
| druid.storage.keyspace | Cassandra 키스페이스(keyspace). | none |
중앙 집중식 데이터소스 스키마 (Centralized datasource schema, 실험적)
이것은 세그먼트 스키마를 메타데이터 스토어에 저장하고 Coordinator에 캐시해 데이터소스 스키마 관리를 개선하는 실험적 기능입니다. 전통적으로 Broker는 데이터 노드와 태스크에 세그먼트 메타데이터 쿼리를 발행해 사용 가능한 모든 세그먼트의 스키마를 가져옵니다. 그러면 각 Broker가 그 데이터소스의 모든 세그먼트 스키마를 결합해 데이터소스의 스키마를 개별적으로 만듭니다. 이 메커니즘은 스키마의 단일 진실 소스가 없어 중복되기 쉽고 오류가 발생하기 쉽습니다.
중앙 집중식 스키마 관리는 이 설계를 다음과 같이 개선합니다.
- 태스크가 세그먼트 메타데이터와 함께 세그먼트 스키마를 데이터베이스에 게시합니다.
- 태스크가 실시간 세그먼트의 스키마를 주기적으로 Coordinator에 공지합니다.
- Coordinator가 세그먼트 스키마를 캐시하고 각 데이터소스에 대한 결합 스키마를 만듭니다.
- Broker가 스스로 만들지 않고 Coordinator에 캐시된 데이터소스 스키마를 폴링합니다.
- Broker는 여전히 Coordinator에서 가져오지 못하면 데이터소스 스키마를 만들 능력을 유지합니다.
| 속성 | 설명 | 기본값 | 필수 |
|---|---|---|---|
| druid.centralizedDatasourceSchema.enabled | Coordinator에서 데이터소스 스키마 빌드와 캐싱을 활성화하는 boolean 플래그. 이 속성은 공통 런타임 속성에 지정해야 합니다. | false | 아니요 |
| druid.indexer.fork.property.druid.centralizedDatasourceSchema.enabled | CentralizedDatasourceSchema 기능이 활성화되었을 때 설정해야 하는 구성. Middle Manager 런타임 속성에 지정해야 합니다. | false | 아니요 |
이 기능을 활성화하면 딥 스토리지에만 저장되고 Historical에 로드되지 않은 데이터소스도 쿼리할 수 있습니다. 자세한 내용은 Query from deep storage를 참고하세요. 오래된 스키마 정리 구성은 Metadata Management의 druid.coordinator.kill.segmentSchema 접두어 속성을 참고하세요.
수집 보안 구성
HDFS 입력 소스
HDFS 입력 소스에 허용되는 프로토콜을 지정하려면 다음 속성을 설정할 수 있습니다.
| 속성 | 가능한 값 | 설명 | 기본값 |
|---|---|---|---|
| druid.ingestion.hdfs.allowedProtocols | 프로토콜 목록 | HDFS 입력 소스에 허용되는 프로토콜. | ["hdfs"] |
HTTP 입력 소스
HTTP 입력 소스에 허용되는 프로토콜을 지정하려면 다음 속성을 설정할 수 있습니다.
| 속성 | 가능한 값 | 설명 | 기본값 |
|---|---|---|---|
| druid.ingestion.http.allowedProtocols | 프로토콜 목록 | HTTP 입력 소스에 허용되는 프로토콜. | ["http", "https"] |
| druid.ingestion.http.allowedHeaders | HTTP 입력 소스에 허용되는 요청 헤더 목록. 기본적으로 목록은 비어 있어, 수집 스펙에서 어떤 헤더도 허용되지 않습니다. | [] |
외부 데이터 접근 보안 구성
외부 데이터베이스로의 JDBC 연결
허용되는 JDBC 옵션을 지정하려면 다음 속성을 사용할 수 있습니다.
- SQL 입력 소스
- 전역 캐시된 JDBC lookup
- per-lookup 캐싱용 JDBC Data Fetcher
이 속성들은 메타데이터 스토리지 연결에는 적용되지 않습니다.
| 속성 | 가능한 값 | 설명 | 기본값 |
|---|---|---|---|
| druid.access.jdbc.enforceAllowedProperties | Boolean | true이면 Druid가 jdbc:postgresql:, jdbc:mysql:, jdbc:mariadb:로 시작하는 JDBC 연결에 druid.access.jdbc.allowedProperties를 적용합니다. false이면 Druid가 JDBC 속성 검증 없이 모든 종류의 JDBC 연결을 허용합니다. 이 구성은 특히 업그레이드 중에 허용 목록 적용이 JDBC 기반의 기존 수집 작업이나 lookup을 깨뜨릴 수 있어서 역호환용입니다. 이 구성은 비권장이며 향후 릴리스에서 제거될 예정입니다. |
true |
| druid.access.jdbc.allowedProperties | JDBC 속성 목록 | 허용된 JDBC 속성 목록을 정의합니다. Druid는 druid.access.jdbc.enforceAllowedProperties가 true로 설정되면 jdbc:postgresql:, jdbc:mysql:, jdbc:mariadb:로 시작하는 모든 JDBC 연결에 이 목록을 항상 적용합니다. 이 옵션은 MySQL connector 8.2.0, MariaDB connector 2.7.4, PostgreSQL connector 42.2.14에 대해 테스트되었습니다. 다른 커넥터 버전은 동작하지 않을 수 있습니다. |
["useSSL", "requireSSL", "ssl", "sslmode"] |
| druid.access.jdbc.allowUnknownJdbcUrlFormat | Boolean | false이면 Druid는 jdbc:postgresql: 또는 jdbc:mysql:로 시작하는 JDBC 연결만 허용합니다. true이면 Druid가 모든 종류의 데이터베이스에 대한 JDBC 연결을 허용하지만, PostgreSQL과 MySQL/MariaDB에 대해서만 druid.access.jdbc.allowedProperties를 적용합니다. |
true |
태스크 로깅 (Task logging)
druid.indexer 구성을 사용해 태스크 로그 파일의 장기 저장 위치를 설정하고 보존 정책을 설정할 수 있습니다. 수집 태스크와 로그 생성 서비스에 대한 자세한 내용은 task reference를 참고하세요.
로그 장기 저장소
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.type | 태스크 로그를 저장할 위치. noop, s3, azure, google, hdfs, file |
file |
파일 태스크 로그
태스크 로그를 로컬 파일 시스템에 저장합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.directory | 로컬 파일 시스템 경로. | log |
S3 태스크 로그
태스크 로그를 S3에 저장합니다. druid-s3-extensions 확장을 로드해야 합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.s3Bucket | S3 bucket 이름. | none |
| druid.indexer.logs.s3Prefix | S3 키 접두어. | none |
| druid.indexer.logs.disableAcl | ACL용 boolean 플래그. false로 설정하면 bucket 소유자에게 전체 제어 권한이 부여됩니다. 태스크 로그 bucket이 딥 스토리지(S3) bucket과 같고 druid.storage.disableAcl이 true로 설정되어 있다면 이 속성 값을 true로 설정해야 합니다. |
false |
Azure Blob Store 태스크 로그
태스크 로그를 Azure Blob Store에 저장합니다. 이 기능을 활성화하려면 druid-azure-extensions 확장을 로드하고 Azure용 딥 스토리지를 구성하세요. Druid는 딥 스토리지에 구성된 것과 같은 인증 방법을 사용하며 (druid.azure.account에 설정된) 같은 스토리지 계정에 태스크 로그를 저장합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.container | 로그를 쓸 Azure Blob Store 컨테이너. | 설정해야 함. |
| druid.indexer.logs.prefix | 로그 앞에 붙일 경로. | 설정해야 함. |
Google Cloud Storage 태스크 로그
태스크 로그를 Google Cloud Storage에 저장합니다. 참고: druid-google-extensions 확장을 로드해야 하며, 이는 google용 딥 스토리지 모듈과 같은 스토리지 설정을 사용합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.bucket | 로그를 쓸 Google Cloud Storage bucket | none |
| druid.indexer.logs.prefix | 로그 앞에 붙일 경로 | none |
HDFS 태스크 로그
태스크 로그를 HDFS에 저장합니다. druid-hdfs-storage 확장을 로드해야 합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.directory | 로그를 저장할 디렉터리. | none |
로그 보존 정책
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexer.logs.kill.enabled | 오래된 태스크 로그의 삭제를 활성화할지 여부에 대한 boolean 값. true로 설정하면 Overlord가 지정된 druid.indexer.logs.kill.delay에 따라 주기적으로 kill 태스크를 제출해, 마지막 druid.indexer.logs.kill.durationToRetain 기간에 생성된 태스크를 제외하고 로그 디렉터리의 태스크 로그와 메타데이터 스토리지의 tasks 및 tasklogs 테이블 항목을 삭제합니다. |
false |
| druid.indexer.logs.kill.durationToRetain | kill이 활성화되면 필수. 밀리초 단위로, 마지막 x 밀리초에 생성된 보존할 태스크 로그와 태스크 관련 메타데이터 스토리지 테이블 항목. | None |
| druid.indexer.logs.kill.initialDelay | 선택. Overlord 시작 후 첫 자동 kill이 실행될 때까지의 밀리초 수. | 300000(5분)보다 작은 무작위 값 |
| druid.indexer.logs.kill.delay | 선택. 자동 kill 실행 사이의 밀리초 단위 지연. | 21600000 (6시간) |
API 오류 응답
Druid 클래스 이름, 스택 트레이스, 스레드 이름, servlet 이름, 코드, 줄/컬럼 번호, 호스트, IP 주소 같은 내부 정보를 숨기도록 Druid API 오류 응답을 구성할 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.server.http.showDetailedJettyErrors | true로 설정하면 Jetty 계층/Jetty 필터의 모든 오류가 JSON 응답에 다음 필드를 포함합니다: 존재한다면 servlet, message, url, status, cause. false로 설정하면 JSON 응답은 message, url, status만 포함합니다. 필드 값은 그대로 유지됩니다. |
true |
| druid.server.http.errorResponseTransform.strategy | 오류 응답 변환 전략. 이 전략은 Druid가 Druid 서비스의 오류 응답을 어떻게 변환하는지 제어합니다. 설정하지 않거나 none으로 설정하면 Druid는 오류 응답을 그대로 둡니다. |
none |
오류 응답 변환 전략
오류 응답 변환 전략을 사용해 Druid 서비스 내부의 오류 응답을 변환해 내부 정보를 숨길 수 있습니다. none이 아닌 오류 응답 변환 전략을 지정하면 Druid는 Druid 서비스의 오류 응답을 다음과 같이 변환합니다.
- Router 서비스에서 실패하는 모든 쿼리 API에 대해 Druid는
errorClass와host필드를 null로 설정합니다. Druid는 변환 전략을errorMessage필드에 적용합니다. - 실패하는 모든 SQL 쿼리 API(예:
POST /druid/v2/sql/...)에 대해 Druid는errorClass와host필드를 null로 설정합니다. Druid는 변환 전략을errorMessage필드에 적용합니다. - JDBC 관련 예외에 대해 Druid는 모든 checked 예외를
QueryInterruptedException으로 바꾸고, 그렇지 않으면 Druid는 예외를 같은 타입으로 유지하려고 시도합니다. 예를 들어 원래 예외가 Druid 소유가 아니면QueryInterruptedException이 됩니다. Druid는 변환 전략을errorMessage필드에 적용합니다.
오류 응답 변환 전략 없음
이 모드에서 Druid는 기본 서비스의 오류 응답을 그대로 두고 API 클라이언트에 변경되지 않은 오류를 반환합니다. 이것이 기본 Druid 오류 응답 모드입니다. 이 전략을 명시적으로 활성화하려면 druid.server.http.errorResponseTransform.strategy를 none으로 설정하세요.
허용 정규식 오류 응답 변환 전략
이 모드에서 Druid는 기본 서비스의 오류 응답을 정규식 목록에 대해 검증합니다. 구성된 정규식과 일치하는 오류 메시지만 반환됩니다. 이 전략을 활성화하려면 druid.server.http.errorResponseTransform.strategy를 allowedRegex로 설정하세요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.server.http.errorResponseTransform.allowedRegex | Druid가 오류 메시지를 검증하는 데 사용하는 정규식 목록. 오류 메시지가 정규식 중 하나와 일치하면 Druid는 그것을 변경 없이 응답에 포함합니다. 오류 메시지가 어떤 정규식과도 일치하지 않으면 Druid는 기본 Exception의 타입에 따라 오류 메시지를 null 또는 기본 메시지로 대체합니다. | [] |
예를 들어 다음 오류 응답을 고려하세요.
{"error":"Plan validation failed","errorMessage":"org.apache.calcite.runtime.CalciteContextException: From line 1, column 15 to line 1, column 38: Object 'nonexistent-datasource' not found","errorClass":"org.apache.calcite.tools.ValidationException","host":null}
druid.server.http.errorResponseTransform.allowedRegex가 []로 설정되면 Druid는 쿼리 오류 응답을 다음과 같이 변환합니다.
{"error":"Plan validation failed","errorMessage":null,"errorClass":null,"host":null}
반면 druid.server.http.errorResponseTransform.allowedRegex가 [".*CalciteContextException.*"]로 설정되면 Druid는 쿼리 오류 응답을 다음과 같이 변환합니다.
{"error":"Plan validation failed","errorMessage":"org.apache.calcite.runtime.CalciteContextException: From line 1, column 15 to line 1, column 38: Object 'nonexistent-datasource' not found","errorClass":null,"host":null}
Persona 기반 오류 응답 변환 전략
이 모드에서 Druid는 non-users persona를 대상으로 하는 예외를 변환합니다. 그런 예외를 직접 반환하는 대신, 전략은 예외를 무작위 ID에 대해 기록하고 그 ID를 일반 오류 메시지와 함께 사용자에게 반환합니다. 이 전략을 활성화하려면 druid.server.http.errorResponseTransform.strategy를 persona로 설정하세요.
Overlord 발견 (Overlord discovery)
이 구성은 Curator 서비스 발견으로 Overlord를 찾는 데 사용됩니다. 실제로 Overlord를 실행 중일 때만 필요합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.selectors.indexing.serviceName | Overlord 서비스의 druid.service 이름. Overlord를 다른 이름으로 시작하려면 이 속성으로 설정하세요. |
druid/overlord |
Coordinator 발견
이 구성은 Curator 서비스 발견으로 Coordinator를 찾는 데 사용됩니다. 이 구성은 실시간 인덱싱 서비스가 클러스터에 로드된 세그먼트에 대한 정보를 얻는 데 사용합니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.selectors.coordinator.serviceName | Coordinator 서비스의 druid.service 이름. Coordinator를 다른 이름으로 시작하려면 이 속성으로 설정하세요. |
druid/coordinator |
세그먼트 공지 (Announcing segments)
(Curator를 사용해) ZooKeeper에서 Znode를 공지하고 공지 해제하는 방식을 구성할 수 있습니다. 일반적인 운영에서는 이 구성들을 재정의할 필요가 없습니다.
배치 데이터 세그먼트 announcer
현재 Druid에서 여러 데이터 세그먼트가 같은 Znode 아래에 공지될 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.announcer.segmentsPerNode | 각 Znode는 최대 이 개수만큼의 세그먼트에 대한 정보를 담습니다. | 50 |
| druid.announcer.maxBytesPerNode | Znode의 최대 byte 크기. 허용 범위는 [1024, 1048576]. | 524288 |
| druid.announcer.skipDimensionsAndMetrics | 세그먼트 공지에서 Dimensions와 Metrics 목록을 건너뜁니다. 참고: 이것을 활성화하면 Coordinator와 Broker 엔드포인트에서도 dimensions와 metrics 목록이 제거됩니다. | false |
| druid.announcer.skipLoadSpec | 세그먼트 공지에서 세그먼트 LoadSpec을 건너뜁니다. 참고: 이것을 활성화하면 Coordinator와 Broker 엔드포인트에서도 loadspec이 제거됩니다. | false |
배치 데이터 세그먼트 announcer를 끄고 싶다면 세그먼트 공지를 건너뛰는 속성을 추가할 수 있습니다. druid.serverview.type에 대해 batch를 사용하는 서비스가 있다면 이 구성을 활성화하고 싶지 않을 거예요.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.announcer.skipSegmentAnnouncementOnZk | ZooKeeper에 세그먼트를 공지하지 않도록 건너뜁니다. true로 설정하면 배치 서버 뷰가 동작하지 않을 것임에 유의하세요. | false |
JavaScript
Druid는 JavaScript 함수를 통한 동적 런타임 확장을 지원합니다. 이 기능은 다음 속성으로 구성할 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.javascript.enabled | JavaScript 기능을 활성화하려면 "true"로 설정합니다. JavaScript filter, extractionFn, aggregator, post-aggregator, router strategy, worker selection strategy에 영향을 줍니다. |
false |
참고: JavaScript 기반 기능은 기본적으로 비활성화되어 있습니다. Druid의 JavaScript 기능 사용 지침(활성화 방법 포함)은 Druid JavaScript programming guide를 참고하세요.
Double 컬럼 저장
0.13.0 버전 이전의 Druid 저장 계층은 인덱싱 시점에 doubleSum, doubleMin, doubleMax 집계자가 만든 컬럼을 저장할 때 32-bit float 표현을 사용했습니다. 0.13.0부터 Double 컬럼의 기본은 64-bit float가 됩니다. Double 컬럼에 64-bit 표현을 사용하면 정밀도 손실을 피할 수 있고, 그 대가로 그러한 컬럼의 저장 크기가 두 배가 됩니다. 기존 형식을 유지하려면 시스템 전역 속성 druid.indexing.doubleStorage=float를 설정하세요. 32-bit float 표현을 사용하려면 floatSum, floatMin, floatMax를 사용할 수도 있습니다. 64-bit 부동 소수점 컬럼 지원은 Druid 0.11.0에서 릴리스되었으므로, 이 기능을 쓰면 이전 버전의 Druid는 데이터 세그먼트를 읽을 수 없습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.indexing.doubleStorage | Double 컬럼에 32-bit double 표현을 사용하려면 "float"로 설정. |
double |
HTTP 클라이언트
모든 Druid 컴포넌트는 HTTP로 서로 통신할 수 있습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.global.http.numConnections | 대상 URL당 연결 풀 크기. 같은 URL에 대해 이 수보다 많은 HTTP 요청이 필요한 경우 큐에 대기합니다. | 20 |
| druid.global.http.eagerInitialization | http 연결을 즉시 초기화해야 함을 나타냅니다. true로 설정하면 초기화 시 numConnections 개의 연결이 생성됩니다. |
false |
| druid.global.http.compressionCodec | 다른 사람들과 통신하기 위한 압축 코덱. "gzip" 또는 "identity"일 수 있습니다. |
gzip |
| druid.global.http.readTimeout | 데이터 읽기 타임아웃. | PT15M |
| druid.global.http.unusedConnectionTimeout | 연결 풀에서 유휴 연결의 타임아웃. 풀의 연결은 이 타임아웃 후에 닫히고 새 연결이 설정됩니다. 이 타임아웃은 druid.global.http.readTimeout보다 작아야 합니다. 이 타임아웃을 druid.global.http.readTimeout의 ~90%로 설정하세요. |
PT4M |
| druid.global.http.numMaxThreads | 최대 I/O 워커 스레드 수 | (코어 수) * 3 / 2 + 1 |
| druid.global.http.clientConnectTimeout | 클라이언트 연결 설정 타임아웃(밀리초). | 500 |
공통 엔드포인트 구성
이 섹션은 모든 서비스가 지원하는 엔드포인트에 대한 구성 옵션을 담습니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.server.hiddenProperties | 이 목록에 속성 이름이나 속성 이름의 부분 문자열(대소문자 구분 안 함)이 있으면 /status/properties 엔드포인트의 응답은 이 속성들을 표시하지 않습니다. |
["druid.s3.accessKey","druid.s3.secretKey","druid.metadata.storage.connector.password", "password", "key", "token", "pwd"] |
마스터 서버 (Master server)
이 섹션은 제안된 3-서버 구성에서 마스터 서버(Coordinator와 Overlord)에 상주하는 서비스의 구성 옵션을 담습니다.
Coordinator
일반적인 Coordinator 서비스 정보는 Coordinator service를 참고하세요.
정적 구성 (Static Configuration)
이 Coordinator 정적 구성은 coordinator/runtime.properties 파일에서 정의할 수 있습니다.
Coordinator 서비스 구성
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.host | 현재 서비스의 호스트. 이 값은 현재 서비스 위치를 다른 서비스에서 도달 가능한 것으로 공지하는 데 사용되며, 일반적으로 http://${druid.host}/가 실제로 이 서비스와 통신할 수 있도록 지정해야 합니다. |
InetAddress.getLocalHost().getCanonicalHostName() |
| druid.bindOnHost | 서비스의 내부 jetty 서버가 druid.host에 바인딩할지 여부를 나타냄. 기본값은 false이며, 모든 인터페이스에 바인딩함을 뜻합니다. |
false |
| druid.plaintextPort | 실제로 수신할 포트. 포트 매핑을 사용하지 않는 한 이것은 druid.host의 포트와 같습니다. |
8081 |
| druid.tlsPort | HTTPS 커넥터용 TLS 포트. druid.enableTlsPort가 설정되면 이 구성이 사용됩니다. druid.host가 포트를 포함하면 그 포트는 무시됩니다. 이 값은 음수가 아닌 정수여야 합니다. |
8281 |
| druid.service | 서비스의 이름. 메트릭과 알림을 내보낼 때 다양한 서비스들을 구분하는 차원으로 사용됩니다. | druid/coordinator |
| druid.labels | 서버의 커스텀 라벨을 정의하는 key-value 쌍의 선택적 JSON 객체. 이 라벨들은 웹 콘솔의 "Services" 탭 아래에 표시됩니다. 예: druid.labels={"location":"Airtrunk"} 또는 druid.labels.location=Airtrunk |
null |
Coordinator 동작 (Coordinator operation)
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.coordinator.period | Coordinator의 실행 주기. Coordinator는 세계의 현재 상태를 메모리에 유지하고 주기적으로 "used" 세그먼트 집합과 서비스 중인 세그먼트를 살펴 데이터 토폴로지에 변경이 필요한지 결정하는 방식으로 동작합니다. 이 속성은 각 실행 사이의 지연을 설정합니다. | PT60S |
| druid.coordinator.startDelay | Coordinator의 동작은 실행할 때 세계 상태의 최신 뷰를 갖고 있다는 가정에 기반하지만, 현재 ZooKeeper 상호작용 코드는 Coordinator가 세계의 현재 상태 로딩을 완료했음을 사실로 알 수 없게 작성되어 있습니다. 이 지연은 모든 데이터를 갖고 있다고 믿기에 충분한 시간을 주기 위한 임시방편입니다. | PT300S |
| druid.coordinator.load.timeout | Coordinator가 세그먼트를 Historical 서비스에 할당할 때의 타임아웃 기간. | PT15M |
| druid.coordinator.balancer.strategy | Coordinator가 티어의 Historical 서버들 사이에 세그먼트를 분산하는 데 사용하는 밸런싱 전략. cost 전략은 비용 함수를 최소화해 세그먼트를 분산하고, diskNormalized는 서버의 디스크 사용 비율로 이 비용에 가중치를 주며, random은 세그먼트를 무작위로 분산합니다. | cost |
| druid.coordinator.loadqueuepeon.http.repeatDelay | 어떤 서버의 세그먼트 로드/드롭 큐를 관리하는 load queue peon의 시작 및 반복 지연(밀리초). | 1 minute |
| druid.coordinator.loadqueuepeon.http.batchSize | 하나의 HTTP 요청으로 배치할 세그먼트 로드/드롭 요청 수. Historical 서비스의 druid.segmentCache.numLoadingThreads 구성보다 작거나 같아야 합니다. 이 값이 구성되지 않으면 coordinator는 해당 서버의 numLoadingThreads 값을 사용합니다. |
druid.segmentCache.numLoadingThreads |
| druid.coordinator.asOverlord.enabled | 이 Coordinator 서비스가 Overlord처럼도 동작해야 하는지에 대한 boolean 값. 이 구성은 독립 Overlord 서비스를 배포하지 않아도 되게 해 Druid 클러스터를 단순화할 수 있게 해줍니다. true로 설정하면 Overlord 콘솔이 http://coordinator-host:port/console.html에서 사용 가능하며, druid.coordinator.asOverlord.overlordService도 설정해야 합니다. |
false |
| druid.coordinator.asOverlord.overlordService | druid.coordinator.asOverlord.enabled가 true이면 필수. 이것은 독립 Overlord 서비스의 druid.service 값과 Middle Manager의 druid.selectors.indexing.serviceName 값과 같아야 합니다. |
NULL |
데이터 관리 (Data management)
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.coordinator.period.indexingPeriod | 컴팩트 태스크 실행과 사용되지 않는 데이터 정리를 포함한 데이터 관리 duty를 Coordinator에서 실행하는 주기. 이 값을 druid.manager.segments.pollDuration보다 길게 유지할 것을 권장합니다. |
PT1800S (30 mins) |
| druid.coordinator.kill.pendingSegments.on | Coordinator가 메타데이터 스토어의 pendingSegments 테이블에서 오래된 항목을 정리할지 여부에 대한 boolean 플래그. true로 설정하면 Coordinator가 가장 최근에 완료된 태스크의 생성 시간을 확인합니다. 없으면 가장 이른 실행 중/pending/대기 태스크의 생성 시간을 찾습니다. 생성 시간을 찾으면 killPendingSegmentsSkipList(Dynamic configuration 참고)에 없는 모든 데이터소스에 대해 Coordinator는 Overlord에 pendingSegments 테이블에서 찾은 생성 시간보다 1일 이상 오래된 항목을 정리하도록 요청합니다. 이것은 지정된 druid.coordinator.period.indexingPeriod에 따라 주기적으로 수행됩니다. |
true |
| druid.coordinator.kill.on | Coordinator가 unused 세그먼트에 대한 kill 태스크를 제출하고 메타데이터 스토어와 딥 스토리지에서 영구 삭제하도록 활성화하는 boolean 플래그. | false |
| druid.coordinator.kill.period | 인덱싱 서비스에 kill 태스크를 보내는 빈도. 값은 druid.coordinator.period.indexingPeriod보다 크거나 같아야 합니다. kill이 켜져 있을 때만 적용됩니다. |
druid.coordinator.period.indexingPeriod와 동일 |
| druid.coordinator.kill.durationToRetain | 보존할 세그먼트의 데이터 간격을 식별하는, 현재 시간 기준의 ISO 8601 형식 기간. druid.coordinator.kill.on이 true일 때 now - durationToRetain 이전에 끝나는 데이터 간격을 가진 세그먼트는 영구 삭제 자격이 있습니다. 예를 들어 durationToRetain이 P90D로 설정되면 끝나는 시간 간격이 90일 전인 unused 세그먼트가 삭제 자격이 됩니다. durationToRetain이 음수 ISO 8601 기간으로 설정되면 now - durationToRetain 이전에 끝나는 미래 간격의 세그먼트도 삭제 자격이 됩니다. |
P90D |
| druid.coordinator.kill.ignoreDurationToRetain | druid.coordinator.kill.durationToRetain을 재정의하고 unused 세그먼트 간격의 종료 날짜를 신경 쓰지 않겠다고 coordinator에 알리는 방법. true이면 coordinator는 모든 unused 세그먼트를 kill 자격이 있는 것으로 간주합니다. |
false |
| druid.coordinator.kill.bufferPeriod | 세그먼트가 메타데이터와 딥 스토리지에서 영구 제거되기 전에 unused여야 하는 시간. 이것은 세그먼트가 unused로 표시된 후 실제로 필요하게 된 경우 데이터 손실을 막는 버퍼 기간 역할을 할 수 있습니다. | P30D |
| druid.coordinator.kill.maxSegments | kill 태스크당 kill할 unused 세그먼트 수. 이 수는 0보다 커야 합니다. druid.coordinator.kill.on=true일 때만 적용됩니다. |
100 |
| druid.coordinator.kill.maxInterval | kill 태스크당 삭제할 세그먼트의, ISO 8601 기간으로 표현한 가장 큰 간격. 무제한이면 PT0S 같은 0으로 설정하세요. druid.coordinator.kill.on=true일 때만 적용됩니다. |
P30D |
메타데이터 관리 (Metadata management)
| 속성 | 설명 | 필수 | 기본값 |
|---|---|---|---|
| druid.coordinator.period.metadataStoreManagementPeriod | ISO 8601 기간 형식으로 메타데이터 관리 태스크를 실행하는 빈도. | 아니요 | PT1H |
| druid.coordinator.kill.supervisor.on | 종료된 supervisor의 자동 삭제를 활성화할지에 대한 boolean 값. true로 설정하면 Coordinator가 메타데이터 스토리지의 supervisor 테이블에서 종료된 supervisor를 주기적으로 제거합니다. | 아니요 | true |
| druid.coordinator.kill.supervisor.period | ISO 8601 기간 형식으로 종료된 supervisor를 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.supervisor.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.supervisor.durationToRetain | ISO 8601 기간 형식으로 생성 시간부터 보존할 종료된 supervisor의 기간. druid.coordinator.kill.supervisor.on이 true로 설정된 경우에만 적용됩니다. |
druid.coordinator.kill.supervisor.on이 true이면 예 |
P90D |
| druid.coordinator.kill.audit.on | 감사 로그의 자동 삭제를 활성화할지에 대한 boolean 값. true로 설정하면 Coordinator가 메타데이터 스토리지의 audit 테이블 항목에서 감사 로그를 주기적으로 제거합니다. | 아니요 | True |
| druid.coordinator.kill.audit.period | ISO 8601 기간 형식으로 감사 로그를 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.audit.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.audit.durationToRetain | ISO 8601 기간 형식으로 생성 시간부터 보존할 감사 로그의 기간. druid.coordinator.kill.audit.on이 true로 설정된 경우에만 적용됩니다. |
druid.coordinator.kill.audit.on이 true이면 예 |
P90D |
| druid.coordinator.kill.compaction.on | 컴팩션 구성의 자동 삭제를 활성화할지에 대한 boolean 값. true로 설정하면 Coordinator가 메타데이터 스토리지의 config 테이블에서 비활성 데이터소스(used 및 unused 세그먼트가 없는 데이터소스)의 컴팩션 구성을 주기적으로 제거합니다. | 아니요 | True |
| druid.coordinator.kill.compaction.period | ISO 8601 기간 형식으로 컴팩션 구성을 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.compaction.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.rule.on | 규칙의 자동 삭제를 활성화할지에 대한 boolean 값. true로 설정하면 Coordinator가 메타데이터 스토리지의 rule 테이블에서 비활성 데이터소스의 규칙을 주기적으로 제거합니다. | 아니요 | True |
| druid.coordinator.kill.rule.period | ISO 8601 기간 형식으로 규칙을 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.rule.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.rule.durationToRetain | ISO 8601 기간 형식으로 생성 시간부터 보존할 규칙의 기간. druid.coordinator.kill.rule.on이 true로 설정된 경우에만 적용됩니다. |
druid.coordinator.kill.rule.on이 true이면 예 |
P90D |
| druid.coordinator.kill.datasource.on | 데이터소스 메타데이터의 자동 삭제를 활성화할지에 대한 boolean 값. (참고: 데이터소스 메타데이터는 supervisor에서 만든 데이터소스에만 존재합니다.) true로 설정하면 Coordinator가 메타데이터 스토리지의 datasource 테이블에서 종료된 supervisor의 데이터소스 메타데이터를 주기적으로 제거합니다. | 아니요 | True |
| druid.coordinator.kill.datasource.period | ISO 8601 기간 형식으로 데이터소스 메타데이터를 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.datasource.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.datasource.durationToRetain | ISO 8601 기간 형식으로 생성 시간부터 보존할 데이터소스 메타데이터의 기간. druid.coordinator.kill.datasource.on이 true로 설정된 경우에만 적용됩니다. |
druid.coordinator.kill.datasource.on이 true이면 예 |
P90D |
| druid.coordinator.kill.segmentSchema.on | 사용하지 않는 세그먼트 스키마의 자동 삭제를 활성화할지에 대한 boolean 값. true로 설정하면 Coordinator가 어떤 used 세그먼트도 참조하지 않는 세그먼트 스키마를 주기적으로 식별해 unused로 표시합니다. 이후에 이 unused 스키마들은 삭제됩니다. Centralized Datasource schema 기능이 활성화된 경우에만 적용됩니다. | 아니요 | True |
| druid.coordinator.kill.segmentSchema.period | ISO 8601 기간 형식으로 세그먼트 스키마를 자동 삭제하는 빈도. 값은 druid.coordinator.period.metadataStoreManagementPeriod 이상이어야 합니다. druid.coordinator.kill.segmentSchema.on이 true로 설정된 경우에만 적용됩니다. |
아니요 | P1D |
| druid.coordinator.kill.segmentSchema.durationToRetain | ISO 8601 기간 형식으로 unused로 표시된 시점부터 보존할 세그먼트 스키마의 기간. druid.coordinator.kill.segmentSchema.on이 true로 설정된 경우에만 적용됩니다. |
druid.coordinator.kill.segmentSchema.on이 true로 설정된 경우 예 |
P90D |
세그먼트 관리 (Segment management)
| 속성 | 가능한 값 | 설명 | 기본값 |
|---|---|---|---|
| druid.serverview.type | batch 또는 http | 사용할 세그먼트 발견 방법. "http"는 ZooKeeper 대신 HTTP를 사용해 세그먼트를 발견하게 합니다. |
http |
| druid.coordinator.segment.awaitInitializationOnStart | true 또는 false | Coordinator가 시작 전에 세그먼트 뷰가 완전히 초기화될 때까지 기다릴지 여부. 'true'로 설정하면 서버 뷰가 초기화될 때까지 Coordinator의 HTTP 서버가 시작되지 않고 Coordinator가 사용 가능함을 공지하지 않습니다. |
true |
메타데이터 검색 (Metadata retrieval)
| 속성 | 설명 | 기본값 |
|---|---|---|
| druid.manager.config.pollDuration | manager가 config 테이블의 업데이트를 폴링하는 빈도. | PT1M |
| druid.manager.segments.pollDuration | Coordinator가 활성 세그먼트 집합의 업데이트를 폴링하는 사이의 기간. 일반적으로 Coordinator가 새 세그먼트를 알아차리는 데 걸릴 수 있는 지연 시간을 정의합니다. | PT1M |
| druid.manager.segments.useIncrementalCache | 세그먼트 메타데이터 증가분 캐시의 사용 모드를 표시합니다. 이 캐시는 업데이트된 세그먼트의 페이로드만 검색하므로 Coordinator가 현재 사용하는 폴링 메커니즘에 비해 성능 향상을 제공합니다. 가능한 캐시 모드: (a) never: 증가분 캐시 비활성화. (b) always: 증가분 캐시 활성화. 캐시가 메타데이터 스토어와 최소 한 번 동기화될 때까지 서비스 시작이 차단됩니다. (c) ifSynced: 캐시 활성화. 이 모드는 서비스 시작을 차단하지 않으며 Coordinator의 기존 동작을 유지하는 방법입니다. 증가분 캐시가 always 또는 ifSynced 모드이면, 리더가 된 후 캐시가 메타데이터 스토어와 최소 한 번 동기화될 때까지 캐시 읽기가 차단됩니다. Coordinator는 이 캐시에 절대 쓰지 않습니다. |
ifSynced |
| druid.manager.rules.pollDuration | Coordinator가 활성 규칙 집합의 업데이트를 폴링하는 사이의 기간. 일반적으로 Coordinator가 규칙을 알아차리는 데 걸릴 수 있는 지연 시간을 정의합니다. | PT1M |
| druid.manager.rules.defaultRule | 클러스터의 기본 규칙 | _default |
| druid.manager.rules.alertThreshold | 실패한 폴링 후 알림이 내보내져야 하는 기간. | PT10M |
동적 구성 (Dynamic configuration)
Coordinator는 서비스 재시작 없이 특정 동작을 즉석에서 조정할 수 있는 동적 구성을 갖고 있습니다. 이 파라미터들은 웹 콘솔(권장)이나 Coordinator dynamic configuration API를 통해 구성할 수 있습니다.
다음 표는 Coordinator의 동적 구성 속성을 보여줍니다.
| 속성 | 설명 | 기본값 |
|---|---|---|
| millisToWaitBeforeDeleting | Coordinator가 메타데이터 스토리지에서 overshadowed 세그먼트를 unused로 표시하기 시작하기 전에 리더여야 하는 시간. | 900000 (15 mins) |
| smartSegmentLoading | Coordinator 성능을 최대화하는 여러 속성의 최적 값을 동적으로 계산하는 "스마트" 세그먼트 로딩 모드를 활성화합니다. | true |
| maxSegmentsToMove | 임의의 시점에 Historical 티어에서 이동할 수 있는 최대 세그먼트 수. | 100 |
| replicantLifetime | Druid가 알림을 올리기 전에 세그먼트가 Historical의 로드 큐에서 대기할 수 있는 최대 Coordinator 실행 횟수. | 15 |
| replicationThrottleLimit | 단일 Coordinator 실행에서 historical 티어에 할당할 수 있는 최대 세그먼트 복제본 수. 이 속성은 클러스터에 이미 사용 가능한 세그먼트의 추가 복제본을 로드할 때 Historical 서비스가 압도되지 않게 방지합니다. | 500 |
| balancerComputeThreads | 세그먼트 밸런싱 중 세그먼트 이동 비용을 계산하는 스레드 풀 크기. 세그먼트가 많고 세그먼트 이동이 지연되기 시작하면 늘리는 것을 고려하세요. | num_cores / 2 |
| killDataSourceWhitelist | druid.coordinator.kill.on이 true일 때 kill 태스크를 발행할 수 있는 특정 데이터 소스 목록. 콤마로 구분된 데이터 소스 이름 목록이거나 JSON 배열일 수 있습니다. killDataSourceWhitelist가 비어 있으면 Coordinator는 모든 데이터 소스에 대해 kill 태스크를 발행합니다. |
none |
| killTaskSlotRatio | 자동 스케일링을 포함한(해당되는 경우) 전체 사용 가능한 태스크 슬롯 대비 kill 태스크에 허용될 비율. 이 값은 0과 1 사이여야 합니다. druid.coordinator.kill.on이 true일 때 활성화되는 coordinator의 자동 kill duty가 자동으로 생성하는 kill 태스크에만 적용됩니다. |
0.1 |
| maxKillTaskSlots | kill 태스크에 허용될 최대 태스크 수. 이 제한은 druid.coordinator.kill.on이 true일 때 활성화되는 coordinator의 자동 kill duty가 자동으로 생성하는 kill 태스크에만 적용됩니다. |
Integer.MAX_VALUE - 제한 없음 |
| killPendingSegmentsSkipList | druid.coordinator.kill.pendingSegments.on 속성이 true일 때 pendingSegments가 정리되지 않는 데이터 소스 목록. 콤마로 구분된 데이터 소스 목록이거나 JSON 배열일 수 있습니다. |
none |
| maxSegmentsInNodeLoadingQueue | 어떤 서버의 로드 큐에 허용되는 최대 세그먼트 수. 예를 들어 클러스터에 로딩이 느린 노드가 있거나 특정 노드에 복제할 세그먼트가 너무 많을 때(더 나은 세그먼트 분포보다 더 빠른 로딩이 선호될 때) 이 파라미터로 세그먼트를 더 빨리 로드하세요. 최적 값은 세그먼트 로딩 속도, 허용 가능한 복제 시간, 노드 수에 따라 달라집니다. | 500 |
| useRoundRobinSegmentAssignment | 세그먼트를 round robin 방식으로 Historical 서비스에 할당할지에 대한 boolean 플래그. 비활성화하면 선택한 balancer 전략으로 세그먼트 할당이 수행됩니다. 활성화하면 세그먼트 할당이 빨라질 수 있고, 밸런싱은 세그먼트가 (balancer 전략에 따라) 최적 위치로 이동하도록 지연시키는 역할을 합니다. | true |
| decommissioningNodes | 폐기(decommission)할 Historical 서버 목록. Coordinator는 폐기 서버에 새 세그먼트를 할당하지 않으며, maxSegmentsToMove가 지정한 최대 속도로 세그먼트를 폐기 서버에서 멀리 이동해 non-폐기 서버에 배치합니다. |
none |
| pauseCoordination | Coordinator가 클러스터 조정의 다양한 duty를 실행해야 하는지에 대한 boolean 플래그. 이것을 true로 설정하면 API는 유지되면서 본질적으로 모든 조정 작업이 일시 중지됩니다. 일시 중지되는 duty에는 CoordinatorDuty 인터페이스를 구현하는 모든 클래스가 포함됩니다. 그런 duty에는 세그먼트 밸런싱, 세그먼트 컴팩션, unused 세그먼트에 대한 kill 태스크 제출(활성화된 경우), 클러스터의 used 세그먼트 로깅, 새로 unused 또는 overshadowed 세그먼트 표시, used 세그먼트에 대한 로드/드롭 규칙 매칭·실행, 더 이상 used로 표시되지 않은 세그먼트의 Historical 서버에서 내리기가 포함됩니다. 관리자가 조정을 일시 중지하고 싶은 예로는 HDFS name node에서 다운타임이 있는 딥 스토리지 유지보수를 하면서, 유지보수가 끝나고 딥 스토어가 다시 사용하기에 건강하다고 선언될 때까지 Coordinator가 Historical 노드에 API 요청으로 name node를 때리도록 지시하지 않으려는 경우입니다. | false |
| replicateAfterLoadTimeout | druid.coordinator.load.timeout 만료로 로드에 실패한 세그먼트에 대해 추가 복제가 필요한지에 대한 boolean 플래그. true로 설정하면 Coordinator가 실패한 세그먼트를 다른 historical 서버에 복제하려 시도합니다. 클러스터에 느린 Historical이 몇 개 있다면 세그먼트 가용성을 개선하는 데 도움이 됩니다. 다만 느린 Historical이 나중에 세그먼트를 로드할 수도 있고, 세그먼트가 과복제되면 Coordinator가 드롭 요청을 발행할 수도 있습니다. |
false |
| turboLoadingNodes | 실험적. 터보 로딩 모드로 전환할 Historical 서버 목록. 이 서버들은 더 큰 스레드 풀을 사용해 세그먼트를 더 빨리 로드하지만 쿼리 성능을 희생합니다. turboLoadingNodes에 지정된 서버에 대해 druid.coordinator.loadqueuepeon.http.batchSize는 무시되고 coordinator는 각각의 numLoadingThreads 값을 사용합니다. 이 구성은 주의해서 사용하세요. 해당 historical의 세그먼트 로딩이 끝나면 모든 서버가 이 목록에서 제거되어야 합니다. |
none |
| cloneServers | 실험적. 대상 Historical 서버에서 원본 Historical 서버로의, 대상이 복제해야 하는 맵. 대상 Historical은 일반 세그먼트 할당이나 밸런싱에 참여하지 않습니다. 대신 Coordinator가 원본 Historical에 한 모든 세그먼트 할당을 대상 Historical에 미러링해, 대상이 원본의 정확한 사본이 되게 합니다. 대상 Historical의 세그먼트는 복제본 수에도 포함되지 않습니다. 원본이 사라지면 구성에서 제거될 때까지 대상은 원본 서버의 마지막 알려진 상태로 남습니다. 이 구성은 주의해서 사용하세요. 각 historical의 원하는 상태가 달성되면 모든 서버가 이 목록에서 제거되어야 합니다. | none |
스마트 세그먼트 로딩 (Smart segment loading)
smartSegmentLoading 모드는 세그먼트 로딩과 밸런싱을 위한 Coordinator 구성을 단순화합니다. 이 모드를 활성화하면 아래 표의 속성 값은 Coordinator가 자동으로 계산하므로 제공하지 마세요. Druid는 클러스터의 현재 상태를 기반으로 Coordinator 성능을 최적화하는 값을 계산합니다.
smartSegmentLoading 모드를 활성화하면 Druid는 다음 속성에 대해 제공한 어떤 값도 무시합니다.
| 속성 | 계산된 값 | 설명 |
|---|---|---|
| useRoundRobinSegmentAssignment | true | 세그먼트 할당을 빠르게 합니다. |
| maxSegmentsInNodeLoadingQueue | 0 | 로드 큐 크기 제한을 제거합니다. |
| replicationThrottleLimit | used 세그먼트의 5%, 최소값 100 | Historical이 간헐적으로만 사라질 때 공격적인 복제를 방지합니다. |
| replicantLifetime | 60 | 알림이 올리기 전에 세그먼트가 로드 큐에서 약 1시간(Coordinator 주기가 1분이라고 가정) 기다릴 수 있게 합니다. smartSegmentLoading 모드에서 로드 큐는 크기로 제한되지 않습니다. 따라서 해당 서버가 로드에 느리더라도 세그먼트가 로드 큐에 할당될 수 있습니다. |
| maxSegmentsToMove | used 세그먼트의 2%, 최소 100, 최대 1000 | 클러스터가 잘 밸런싱되도록 항상 일부 세그먼트가 이동 중이도록 보장합니다. 최대 값은 Coordinator 실행 시간을 유계로 유지합니다. |
| balancerComputeThreads | num_cores / 2 | 모든 Coordinator 리소스를 삼키지 않으면서 밸런싱 계산을 수행할 충분한 스레드가 있도록 보장합니다. |