Apache Druid Ingestion
<Ingestion Methods>
Streaming 방식은 Kafka, Kinesis, Tranquility를 지원하며, Batch 방식은 Native-batch(parallel 가능)와 Hadoop을 지원한다.
<Data Rollup>
Data Model은 Primary Timestamp, Dimensions, Metrics로 구성되며, Rollup 시 Primary Timestamp로 구분된 Partition 내의 Dimensions 별 Metrics를 Rollup 시킨다.
Rollup은 Dimension 수와 각 Dimension의 Cardinality가 적을 수록 데이터 크기가 획기적으로 줄어들지만 반대로 Rollup된 데이터에 대해 개별적인 Query가 불가능해진다.
여기서 Dimension의 경우 Type에 따라 Rollup 시 성능 차이가 발생하는데 Numeric Type의 경우 String Type에 비해 Grouping 성능이 더 향상되지만 Numeric Type은 색인이되지 않아 Query 성능 측면의 Tradeoff가 존재한다.
Rollup의 경우에는 Best-effort Rollup과 Perfect Rollup이 가능한데 Streaming 방식에서는 Best-effort Rollup만 가능하다.
Best-effort Rollup은 Ingestion 내 유입되는 Streaming에 대해 Rollup을 수행하므로, Rollup 정책을 완벽하게 보장할 수 없다.
<Partitioning>
유입되는 데이터가 granularitySpec 정의에 따라 Time chunk로 분할되어 Partition이 생성되고 하나의 Partition은 여러 Segement를 포함할 수 있다.