Apache Druid vs Kudu

Apache Druid vs Kudu

Kudu는 단일 행 업데이트를 지원하고 Druid는 세그먼트 재생성 기반이라지만, Druid는 수집 시점 롤업과 비트맵 인덱스 등 OLAP에 유리한 설계를 갖고 있어요. 이 문서는 두 시스템의 차이점을 비교합니다.

출처: 문서

본문

Kudu의 저장 포맷은 단일 행 업데이트를 가능하게 하지만, 기존 Druid 세그먼트를 업데이트하려면 세그먼트를 다시 만들어야 해요. 그래서 이론적으로 Druid에서 옛 값을 업데이트하는 과정은 더 높은 지연 시간을 가질 수 있습니다. 다만 Kudu는 업데이트를 저장하기 위한 추가 헤드 공간을 유지하고 시간이 아닌 id 기준으로 데이터를 조직하기 때문에, 쿼리 시간에 답변에 필요하지 않은 데이터에 접근하면서 추가 지연 시간이 발생할 여지가 있어요.

Druid는 수집 시점에 데이터를 요약/롤업합니다. 실제로 이는 저장해야 할 원시 데이터를 크게 줄여주고(평균 최대 40배), 원시 데이터 스캔 성능을 크게 향상시킵니다. Druid 세그먼트는 또 빠른 필터링을 위한 비트맵 인덱스를 포함하는데, Kudu는 현재 이를 지원하지 않습니다. Druid의 세그먼트 아키텍처는 빠른 집계와 필터, 그리고 OLAP 워크플로에 크게 맞춰져 있어요. Druid에서 append는 매우 빠르지만, 오래된 데이터의 업데이트는 지연 시간이 더 높습니다. 이는 의도적인 설계예요. Druid가 잘 처리하는 데이터는 보통 이벤트 데이터라서 자주 업데이트할 필요가 없기 때문입니다.

Kudu는 고유성 제약(uniqueness constraint)을 가진 임의의 기본키를 지원하고, 그 키의 범위에 의한 효율적인 조회를 지원합니다. Kudu는 실행 엔진을 포함하지 않기로 선택했지만, 실행 엔진이 노드 로컬 처리를 할 수 있을 만큼 충분한 연산을 지원해요. 즉 Kudu는 같은 데이터에 여러 프레임워크(예: MR, Spark, SQL)를 지원할 수 있습니다. 반면 Druid는 자체 쿼리 계층을 포함해서, 집계와 계산을 데이터 프로세스로 직접 푸시다운해 더 빠른 쿼리 처리를 가능하게 합니다.

더 알아보기 (Learn more)

  • Druid의 저장 포맷과 롤업은 ingestion 문서에서 확인해 보세요.
  • 세그먼트에 관한 자세한 내용은 segments 문서를 참고하세요.