데이터 수집 개요

데이터 수집 개요 (Ingestion)

Druid에 데이터를 넣는 작업을 수집(ingestion) 또는 인덱싱(indexing) 이라고 불러요. 데이터를 수집하면 Druid가 소스 시스템에서 데이터를 읽어 세그먼트라 부르는 데이터 파일에 저장하지요. 세그먼트 파일 하나는 보통 수백만 행을 담아요. 대부분의 수집 방식에서 Druid의 Middle Manager 프로세스나 Indexer 프로세스가 소스 데이터를 로드합니다.

출처: Apache Druid 공식 문서 — Ingestion overview

본문

수집 중에 Druid는 세그먼트를 만들어 deep storage에 저장해요. Historical 노드가 그 세그먼트를 메모리에 로드해 쿼리에 응답하지요. 스트리밍 수집에서는 Middle Manager와 indexer가 도착하는 데이터로 실시간 쿼리에 응답할 수 있어요. 자세한 내용은 Storage overview를 참고하세요.

이 주제에서는 스트리밍·배치 수집 방식을 소개해요. 다음 주제들은 모든 수집 방식에 공통으로 적용되는 수집 개념과 정보를 다룹니다.

수집 방식마다 고유한 개념·설정에 대한 추가 정보는 해당 방식의 주제를 참고하세요.

수집 방식

아래 표는 Druid의 가장 흔한 데이터 수집 방식과, 상황에 맞는 최선의 방식을 고르는 데 도움이 되는 비교를 나열해요. 각 수집 방식은 자기만의 소스 시스템 집합을 지원해요. 각 방식의 동작 원리와 전용 설정 프로퍼티에 대한 자세한 내용은 해당 문서 페이지를 확인하세요.

스트리밍 (Streaming)

스트리밍 수집에는 두 가지 옵션이 있어요. 스트리밍 수집은 계속 실행되는 supervisor가 제어합니다.

방식 Kafka Kinesis
Supervisor 타입 kafka kinesis
동작 방식 Druid가 Apache Kafka®에서 직접 읽어요. Druid가 Amazon Kinesis에서 직접 읽어요.
늦은 데이터 수집 가능? Yes. Yes.
정확히 한 번(exactly-once) 보장? Yes. Yes.

배치 (Batch)

배치 수집에도 두 가지 옵션이 있어요. 배치 수집 잡은 잡이 실행되는 동안 동작하는 컨트롤러 태스크와 연계됩니다.

방식 Native batch SQL
컨트롤러 태스크 타입 index_parallel query_controller
제출 방법 index_parallel 스펙을 Tasks API로 전송해요. INSERT 또는 REPLACE 문을 SQL task API로 전송해요.
병렬성 maxNumConcurrentSubTasks가 1보다 크면 서브태스크를 사용해요. query_worker 서브태스크를 사용해요.
내결함성 실패 시 워커가 자동으로 재시작돼요. 컨트롤러 태스크 실패는 잡 실패로 이어져요. 컨트롤러·워커 태스크 실패 모두 잡 실패로 이어져요.
추가(append) 가능? Yes. Yes (INSERT).
덮어쓰기(overwrite) 가능? Yes. Yes (REPLACE).
외부 의존성 None. None.
입력 소스 모든 inputSource. 모든 inputSource (EXTERN 사용 시) 또는 Druid datasource (FROM 사용 시).
입력 형식 모든 inputFormat. 모든 inputFormat.
세컨더리 파티셔닝 옵션 Dynamic, hash 기반, range 기반 파티셔닝을 지원해요. 자세한 건 partitionsSpec 참고. Range 파티셔닝 (CLUSTERED BY).
롤업 모드 tuningConfigforceGuaranteedRollup = true면 perfect. 항상 perfect.

더 알아보기