나의 잡다한 노트 및 메모

Druid에서 Tune parameters 단계 본문

데이터엔지니어/Druid

Druid에서 Tune parameters 단계

peanutwalnut 2025. 3. 2. 22:48

 

 

Tune parameters 단계는 Druid가 데이터를 효율적으로 저장하고 쿼리 성능을 최적화할 수 있도록 설정하는 과정입니다.

이 단계는 **3가지 세부 단계(Partition, Tune, Publish)**로 나뉘며, 각각의 역할이 다릅니다.

 

1. Partition (파티셔닝)

👉 데이터를 어떻게 분할해서 저장할지 결정하는 단계
Druid는 대량의 데이터를 처리하기 때문에 효율적인 데이터 파티셔닝이 중요합니다.

✅ 주요 파티셔닝 방식

파티셔닝 타입설명사용 예시

dynamic (기본값) 데이터 크기와 분포를 기반으로 자동으로 파티셔닝 대부분의 일반적인 데이터셋
hashed 특정 키 값(예: user_id)을 기준으로 데이터를 분할 사용자별 데이터 분산
single_dim 하나의 특정 차원(예: country)으로 파티션을 나눔 국가별 데이터 분석
none 파티셔닝 없이 하나의 큰 데이터 블록으로 저장 작은 데이터셋

예제 설정 (Hashed Partition)

 
{ "partitioning": { "type": "hashed", "targetPartitionSize": 5000000, "numShards": -1 } }
  • targetPartitionSize: 각 파티션이 갖는 대략적인 행(row) 개수 (5백만 개씩 저장)
  • numShards: -1이면 Druid가 자동으로 적절한 개수를 결정

 

2. Tune (튜닝)

데이터를 효율적으로 저장하기 위한 최적화 단계

이 단계에서는 롤업(roll-up) 및 인덱싱 설정을 조정할 수 있습니다.

주요 튜닝 옵션

튜닝 옵션                                    설명                                                                                                                기본값

rollup 같은 차원 값이 있는 데이터를 집계(Aggregation)하여 저장 true
maxRowsPerSegment 하나의 Druid 세그먼트(segment)당 저장할 최대 행(row) 개수 5,000,000
maxRowsInMemory 메모리에 유지할 최대 행(row) 개수 1,000,000

예제 설정 (롤업 적용)

{
  "tuningConfig": {
    "type": "index_parallel",
    "maxRowsPerSegment": 10000000,
    "maxRowsInMemory": 2000000,
    "rollup": true
  }
}
 
 
  • maxRowsPerSegment: 한 세그먼트당 1천만 개의 행을 저장
  • maxRowsInMemory: 메모리에 200만 개의 행을 유지
  • rollup: true → 같은 차원 값을 가진 데이터는 미리 집계(Aggregation)하여 저장
    • 예) 같은 product_id 값이 있으면 count 같은 메트릭을 미리 합산

롤업을 적용하면 데이터 크기를 줄여 저장 공간과 쿼리 성능을 최적화할 수 있음!

 

3. Publish (퍼블리시)

데이터가 Druid 테이블에 최종적으로 저장되는 단계
이 단계에서는 데이터를 Druid 클러스터에 배포(publish)하고, 기존 데이터를 어떻게 처리할지 결정합니다.

주요 퍼블리시 옵션

옵션                                                   설명                                                                                                기본값

dropExisting 기존 데이터 삭제 후 새로운 데이터만 저장 false
publishDelay 데이터가 저장되기 전 대기 시간 설정 0s
handoffConditionTimeout 데이터가 세그먼트로 이동할 때 최대 대기 시간(ms) 900000 (15분)

예제 설정 (기존 데이터 유지)

{
  "publishConfig": {
    "dropExisting": false,
    "publishDelay": "10s"
  }
}
 
 
  • dropExisting: false → 기존 데이터를 유지하고 새로운 데이터를 추가
  • publishDelay: 10s → 데이터를 저장하기 전에 10초 동안 대기 후 적용

데이터를 실시간으로 적용할지, 기존 데이터를 대체할지 결정하는 중요한 설정!

'데이터엔지니어 > Druid' 카테고리의 다른 글

Supervisors 란?  (0) 2025.03.02
Datasources 단계  (0) 2025.03.02
Druid에서 Filter 단계  (0) 2025.03.02
Druid에서 Parser의 역할  (0) 2025.03.02
Druid 아키텍처 중 주요 컴포넌트의 역할  (0) 2025.03.01