Kafka FinOps: Chargeback Reporting 수행 방법
Source: Dev.to

Kafka를 공유 인프라로 운영한다면, 어느 시점에서든 다음과 같은 질문을 마주했을 가능성이 높습니다: 이 토픽의 책임자는 누구이며, 비용은 얼마인가요? 이것이 Kafka FinOps가 해결하려는 핵심 문제입니다. 이 글에서는 Kafka 환경에서 차지백 보고가 무엇을 의미하는지, 왜 어려운지, 그리고 우리가 PartitionPilot에서 어떻게 구현했는지 설명합니다.
청구 회수 보고서란 무엇인가?
청구 회수(Chargeback)는 클라우드 FinOps에서 차용한 관행으로, 인프라 비용을 하나의 공유 항목으로 처리하는 대신 팀, 서비스 또는 제품별로 세분화하고 실제 사용량에 따라 각각 청구합니다.
AWS나 GCP에서는 비교적 간단합니다. 클라우드 제공업체는 비용 할당 태그를 제공합니다. 그러나 Kafka에는 기본 비용 모델이 없습니다. 팀, 예산 또는 소유권에 대한 정보를 알지 못합니다.
이때 Kafka용 청구 회수 보고서가 필요합니다.
Kafka의 두 가지 비용 요인
청구를 진행하기 전에 Kafka에서 실제로 비용이 발생하는 요소를 이해해야 합니다:
- 스토리지 — 토픽에 기록된 모든 메시지는 보존 기간(보존 설정 기준)이 끝날 때까지 디스크에 저장됩니다. 7일 보존 기간과 높은 처리량을 가진 토픽은 수백 기가바이트의 스토리지를 소비할 수 있습니다.
- 트래픽 — 토픽에 기록되는 모든 바이트(입력 바이트)와 토픽에서 읽히는 모든 바이트(출력 바이트)는 네트워크 트래픽을 발생시킵니다. AWS MSK 또는 Confluent Cloud에서는 이 트래픽에 대해 직접 요금이 부과됩니다.
두 항목 모두 Prometheus JMX 메트릭을 통해 측정할 수 있습니다:
kafka.log:type=Log,name=Size → 토픽‑파티션당 스토리지
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec → 토픽당 입력 트래픽
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec → 토픽당 출력 트래픽누락된 조각: 소유권
Metrics만으로는 청구 회수에 충분하지 않습니다. 또한 각 토픽을 누가 소유하고 있는지 알아야 합니다.
대부분의 Kafka 배포에서는 토픽 소유권이 암묵적인 지식에 불과합니다. 누군가의 머리 속에 있거나, 3년이나 오래된 Confluence 페이지에 있거나, 전혀 존재하지 않을 수도 있습니다.
청구 회수가 제대로 작동하려면 다음과 같은 시스템이 필요합니다:
- 각 토픽을 어느 팀이나 개인이 소유하고 있는지 추적
- 비용 메트릭을 해당 소유권과 연결
- 재무 또는 엔지니어링 관리자가 실제로 활용할 수 있는 보고서 생성
PartitionPilot가 이를 구현하는 방법
PartitionPilot는 Prometheus 엔드포인트에 연결하여 주기적으로 비용 스냅샷을 수집합니다. 각 스냅샷은 토픽별 저장소와 트래픽을 타임스탬프와 함께 기록합니다.
이와 더불어, 각 토픽 및 컨슈머 그룹에 소유자를 지정할 수 있습니다. 소유자 정보는 비용 데이터와 함께 PostgreSQL 데이터베이스에 저장됩니다.
그 결과, 다음과 같은 형식의 CSV 비용 청구 보고서를 얻을 수 있습니다:
Owner,Topic,Storage (GB),Traffic In (GB),Traffic Out (GB),Estimated Cost
Team A,orders.v2,12.4,45.2,180.8,CHF 23.40
Team B,user-events,8.1,120.3,360.9,CHF 41.20
Team C,analytics.raw,95.2,890.1,2670.3,CHF 312.80이 보고서는 매월 엔지니어링 매니저나 재무 팀과 공유할 수 있도록 내보내고 배포할 수 있습니다.
왜 이것은 생각보다 어려운가
실제로 Kafka 청구를 복잡하게 만드는 몇 가지 요소가 있습니다:
- 주제는 공유됩니다. 하나의 토픽은 한 팀이 쓰고 다른 세 팀이 소비할 수 있습니다. 아웃바운드 트래픽 비용을 누가 부담하나요 — 프로듀서인가 소비자인가? 보편적인 답은 없습니다. PartitionPilot는 프로듀서와 소비자 측에 별도의 소유권을 할당할 수 있게 해줍니다.
- 보존 기간 때문에 저장 비용이 명확하지 않습니다. 토픽 비용은 처리량뿐 아니라 보존 설정에 따라 달라집니다. 30일 보존을 가진 저트래픽 토픽이 1시간 보존을 가진 고트래픽 토픽보다 비용이 더 많이 들 수 있습니다.
- 메트릭은 집계가 필요합니다. 원시 Prometheus 메트릭은 브로커당, 파티션당입니다. 의미 있는 수치를 얻으려면 모든 브로커에 걸쳐 토픽별로 집계해야 합니다.
시작하기
PartitionPilot은 Docker Compose를 통해 자체 호스팅됩니다. 신용카드 없이도 partitionpilot.com에서 30일 무료 체험을 시작할 수 있습니다.
팀에서 Kafka를 공유 인프라로 운영하고 있으며 적절한 비용 할당을 시작하고 싶다면, 한 번 사용해 보세요.