Druid Overview¶
드루이드는 이벤트 데이터에 대한 OLAP 쿼리를 위해 설계된 오픈 소스 데이터 저장소이다.
Data¶
드루이드에서 데이터는 3가지 개념으로 나눈다.
Timestamp column 드루이드에서 모든 질의는 timestamp기반으로 처리한다.
Dimension column 필터링하거나 그룹바이할 떄 쓰이는 문자열 컬럼
Metric column 집계 결과를 위한 컬럼, 보통 숫자형의 데이터 컬럼이 됨. count, sum, mean 등 연산이 가능함
Roll-up¶
원시 데이터를 줄이기 위해 수집될 때 롤업을 함
드루이드는 2가지 롤업 모드를 제공한다.
perfect roll-up 처리 시간에 완벽하게(모든 데이터를) 집게됨 이 모드에서는 실제초 집계를 하기 전에 전처리 과정이 필요함(intervals and shardSpecs 이런것들을 결정하기 위해)
best-effort roll-up Meanwhile, in the best-effort roll-up, input data might not be perfectly aggregated and thus there can be multiple segments holding the rows which should belong to the same segment with the perfect roll-up since they have the same dimension value and their timestamps fall into the same interval. 전처리 과정이 필요하지는 않지만 데이터가 perfect roll-up mode 보다 크게 나올 수 있음 모든 streaming indexing(실시간 인덱스 생성, 카프카 인덱싱 서비스)은 이 모드로 처리됨
Indexing the Data¶
데이터의 immutable한 snapshot을 만들어서 쿼리에 사용한다.
드루이드는 컬럼을 저장하는데 이것은 컬럼이 각각 따로 저장될 수 있다는것을 의미함
쿼리에 필요한 컬럼을 사용하는데, 드루이드는 이 컬럼을 찾는것을 매우 잘함
Loading the Data¶
드루이드의 Igeation은 두가지임
Real Time
Batch
Querying the Data¶
드루이드의 기본 쿼리 언어는 HTTP + JSON
이지만 라이브러리를 사용하면 SQL 등 다양한 언어로 사용할 수 있음
드루이드는 조인이 없다. (하지만 듣기로 join이 가능하게 extension을 만들어서 쓰면 된다고 함.)
드루이드에 로드하기 전 데이터를 비정규화 해야하므로 ETL에서 조인을 수행해야함
The Druid Cluster¶
Historical Nodes 드루이드 클러스터의 백본 역할 Immutable Segment를 로컬에서 다운로드하고 그 세그먼트에 대한 쿼리를 제공함 load segment, drop segment, serve query on segment
Broker Nodes 클라이언트와 응용 프로그램이 드루이드에서 데이터를 얻기위해 질의하는 쿼리 분산 및 결과 수집 및 병합을 담당함 세그먼트가 어디에 있는지 알 수 있음
Coordinator Nodes 클러스터의 Historical Nodes에 있는 세그먼트를 관리함 Historical Nodes에 새로운 세그먼트를 로드하고, 옛날 세그먼트를 삭제하고, 세그먼트들을 이동시킴(load balance)
Real-time Processing Standalone Real-time node나 Indexing Service를 사용해서 실시간 처리를 할 수 있음 Real-time processing(데이터를 ingeation하고 세그먼트를 만듬) Hand-off segment(Historical 노드에게 세그먼트 전달)
External Dependencies¶
Zookeeper Service discovery
Metadata Storage Segment나 설정에 대한 metadata를 저장하는 곳 Segment를 생성하면 Metadata Storage에 새 항목을 쓰면, Coordinator Node에서 그것을 보고 새로운 데이터가 저장되는지 옛날 데이터가 삭제되는지 알 수 있다. Production으로는 MySQL, PostgreSQL 테스트용 단일 머신에서 Derby도 괜찮음
Deep Storage Segment의 영구적인 백업 저장소 Segment를 생성하면 Segment를 Deep Storage에 업로드하고 Historical Node는 Deep Storage에서 Segment를 다운로드함
High Availability¶
기본적으로 HA를 보장하게 설계되었다함.
걱정없이 쓰고싶다면 각 노드 타입당 최소 2개이상으로