- Kafka는 데이터센터 시대의 분산 로그로 성공했지만, 퍼블릭 클라우드에서는 AZ 간 네트워크 비용과 로컬 디스크 운영 부담이 커짐
- WarpStream은 Apache Kafka 프로토콜과 호환되는 디스크리스 스트리밍 플랫폼으로, S3 같은 객체 스토리지 위에서 로컬 디스크와 브로커 리밸런싱 없이 동작함
- 3개 가용 영역 Kafka 클러스터는 1GiB 스트리밍마다 최선의 경우에도 약 $0.053의 AZ 간 전송 비용이 들며, 이는 S3 1GiB 한 달 저장 비용 $0.021보다 높음
- WarpStream은 상태 없는 Go 바이너리인 Agent와 별도 메타데이터 저장소로 스토리지·컴퓨트, 데이터·메타데이터를 분리하고 데이터는 사용자 클라우드 계정의 객체 스토리지에 남김
- 비용은 대부분 Kafka 워크로드에서 5~10배 절감될 수 있지만, 현재 구현은 Produce 요청 P99 약 400ms, 생산자-소비자 종단 간 P99 약 1초의 지연 시간을 감수해야 함
클라우드에서 비싸진 Kafka의 기본 구조
- Apache Kafka는 2011년 오픈소스로 공개된 뒤 스트리밍 아키텍처의 기본 인프라로 자리 잡음
- 문제는 Kafka 자체보다, 2011년 LinkedIn 데이터센터에 맞춰진 설계가 현대 클라우드 워크로드와 잘 맞지 않는다는 점임
- 비용과 운영 부담이 특히 크게 드러남
- 클라우드 경제성: Kafka 복제 방식은 AZ 간 대역폭 비용을 크게 만들 수 있음
- 운영 부담: 자체 Kafka 클러스터 운영에는 전담 팀과 맞춤형 도구가 필요함
- 로컬 디스크에 데이터를 저장하는 유사 시스템도 같은 비용·운영 문제를 겪을 수 있음
Kafka-nomics: AZ 간 전송 비용
- 일반적인 3개 가용 영역 Kafka 클러스터에서는 생산된 데이터가 파티션 리더 위치 때문에 2/3 확률로 영역을 넘어 쓰이고, 이후 리더가 다른 두 영역의 팔로워로 데이터를 복제함
- 1GiB가 영역 간 전송될 때 비용은 $0.022로 계산됨
- 출발 영역 egress $0.01
- 도착 영역 ingress $0.01
- 최선의 경우에도 1GiB 스트리밍 비용은
0.02 * 2/3 + 0.02 * 2 = $0.053 수준임
- S3에 1GiB를 한 달 저장하는 비용은 $0.021이며, Kafka로 생산자에서 소비자까지 데이터를 복사하는 비용이면 같은 데이터를 S3에 두 달 넘게 저장할 수 있음
- 처리량이 큰 Kafka 클러스터에서는 하드웨어보다 AZ 간 대역폭 요금이 비용을 지배하며, 워크로드 비용의 70~90%까지 차지할 수 있음
- 처리량이 낮아도 보존 기간이 길면 저장 용량이 커지고, 로컬 SSD에 3중 복제하는 방식은 100% 디스크 사용률을 가정해도 S3 같은 객체 스토리지보다 GiB당 약 10~20배 비쌀 수 있음
개발자가 떠안는 클러스터 운영
- 개발자는 비즈니스 문제를 해결하려고 Kafka를 도입하지만, 먼저 Kafka와 ZooKeeper 또는 KRaft, 리더 선출, 파티션, 컨슈머 그룹, 리밸런싱, 브로커 튜닝, 클라이언트 튜닝을 익혀야 함
- Kafka의 데이터 플레인인 브로커와 합의 기반 컨트롤 플레인인 컨트롤러·ZooKeeper 등은 모두 로컬 SSD 위에서 직접 운영됨
- 자체 호스팅 Kafka 클러스터는 노드 교체나 클러스터 확장 같은 기본 작업도 안전하게 수행하려면 전문 팀과 커스텀 도구가 필요함
- Apache Kafka 내장 파티션 재할당 도구는 브로커 폐기 시 자동 재할당 계획을 만들 수 없고, 관리자가 파티션 복제본 이동 계획을 직접 작성해야 함
- AWS MSK 같은 호스팅 서비스도 운영 부담을 완전히 없애지는 못함
- MSK의 클러스터 리밸런싱 문서는 Apache Kafka 문서로 연결됨
- 해당 절차에는 어떤 파티션을 어떤 브로커로 옮길지 JSON을 수동 편집하는 과정이 포함됨
- Cruise Control은 부담을 줄일 수 있지만, 별도 개념 학습, 서비스 배포·모니터링, 운용상 날카로운 지점이 추가됨
- Cruise Control 자체도 Apache Kafka와 ZooKeeper에 의존하는 JVM 애플리케이션임
객체 스토리지 위에 스트리밍을 올리는 접근
- Datadog에서 만든 Husky는 S3 위에서 직접 실행되는 관측 데이터용 컬럼형 데이터베이스였고, 대부분 상태 없는 자동 확장 데이터 레이크로 동작함
- Husky 구축 이후 Kafka 클러스터는 비교 대상에서 오래된 구조처럼 보이게 됨
- Datadog의 Kafka 대역폭은 두 자릿수 GiB/s, 브로커 저장소는 PiB 단위 NVMe로 측정될 정도였음
- 대규모 저장 워크로드는 클라우드 환경에서 객체 스토리지의 경제성·신뢰성·확장성·탄력성과 경쟁하기 어려움
- Snowflake와 Databricks 같은 빅데이터 기술도 범용 객체 스토리지를 중심으로 시스템을 설계함
- Kafka와 비슷한 시스템을 S3 위에 직접 만들면 두 가지 부담을 동시에 줄일 수 있음
- 비용 감소
- 전통적인 Kafka 운영 문제 감소
- 핵심 난점은 S3 같은 고지연 저장 매체 위에서 로컬 디스크 없이 Kafka 프로토콜의 의미를 유지하면서 저지연 스트리밍 인프라를 만드는 것임
WarpStream 아키텍처
- WarpStream은 AWS S3, GCP GCS, Azure Blob Storage 같은 범용 객체 스토어 위에서 직접 실행되는 Apache Kafka 프로토콜 호환 스트리밍 플랫폼임
- AZ 간 대역폭 비용이 없고, 관리할 로컬 디스크가 없으며, 사용자의 VPC 안에서 실행될 수 있음
- Kafka 브로커 대신 Agent를 사용함
- Agent는 상태 없는 Go 바이너리임
- JVM을 사용하지 않음
- Kafka 프로토콜을 말함
- 어떤 Agent든 토픽 리더, 컨슈머 그룹 오프셋 커밋, 클러스터 코디네이터 역할을 할 수 있음
- WarpStream은 두 가지 분리로 Kafka의 상태ful 구조를 대체함
- 스토리지와 컴퓨트를 분리하고 데이터를 S3로 오프로딩함
- 데이터와 메타데이터를 분리하고 메타데이터를 맞춤형 메타데이터 저장소로 오프로딩함
- 객체 스토리지로 모든 저장을 넘기면 부하 변화에 맞춰 Agent 수를 늘리거나 줄일 때 데이터 리밸런싱이 필요 없음
- 장애가 나도 요청을 다른 Agent에서 즉시 재시도할 수 있어 복구가 빨라짐
- 파티션별 데이터 불균형 때문에 일부 Kafka 브로커 부하가 높아지는 핫스팟 문제도 대부분 줄어듦
- WarpStream Virtual Cluster의 메타데이터는 맞춤형 메타데이터 데이터베이스에 저장됨
- 데이터 복제, 내구성, 가용성은 객체 스토리지 버킷이 맡고, 사용자의 데이터는 클라우드 계정 안에 남음
- 클라우드 계정 밖으로 나가는 것은 파티션 내 배치 순서 같은 합의에 필요한 워크로드 메타데이터뿐임
- 자세한 구조는 WarpStream 아키텍처 문서에 정리돼 있음
비용 예시와 지연 시간 트레이드오프
- 테스트 환경의 지속 스트리밍 워크로드는 140MiB/s 데이터를 계속 생산하고, 전용 소비자 3개가 이를 소비해 총 560MiB/s의 연속 데이터 전송을 만듦
- 전체 클라우드 계정의 AZ 간 네트워크 비용은 하루 평균 $15 미만으로 측정됨
- 같은 워크로드를 Kafka 클러스터에서 실행하면 AZ 간 네트워크 비용만 하루 $641로 계산됨
- 계산식은
0.14GiB * $0.053/GiB * 60 * 60 * 24
- 같은 워크로드의 S3 API 작업 비용은 하루 $40 미만임
- Agent 하드웨어는 27 vCPU 규모의 VM만 필요함
- 대부분 Kafka 워크로드의 총소유비용은 WarpStream에서 5~10배 낮아질 수 있음
- 가장 큰 단점은 지연 시간임
- Produce 요청 P99는 현재 약 400ms임
- 데이터가 S3에 내구적으로 저장되고 클라우드 컨트롤 플레인에 커밋되기 전까지 확인 응답하지 않기 때문임
- 생산자에서 소비자까지의 종단 간 P99 지연 시간은 약 1초임
- 워크로드가 P99 약 1초 생산자-소비자 지연을 허용하면, GiB당 스트리밍 비용을 5~10배 줄이고 운영 부담을 거의 없앨 수 있음
- 인터페이스는 독자 프로토콜이 아니라 Kafka이며, AWS S3, GCP GCS, Azure Blob Storage를 사용하는 환경에서 실행될 수 있음
개발자 경험과 사용 방법
- WarpStream은 Kafka의 주요 문제 중 클라우드 경제성과 운영 부담을 먼저 다룸
- Kafka에는 개발자 경험 문제도 있으며, 파티션은 복잡한 스트림 처리 애플리케이션을 작성하기에 너무 낮은 수준의 추상화로 간주됨
- 향후 스트림 처리 애플리케이션을 전통적인 애플리케이션 작성 방식에 더 가깝게 만들 수 있는 방법을 다룰 계획임
- 데모는 30초 이내에 실행할 수 있음
$ curl https://console.warpstream.com/install.sh | bash
$ warpstream demo
- WarpStream은 Apache Kafka 위에 객체 스토리지 기반 대체품을 판매하는 회사의 제품 소개이며, 본문 수치와 비교는 그 맥락에서 읽어야 함