본문 바로가기
Backend2026년 5월 17일4분 읽기

NATS JetStream — Kafka 대체, 운영 부담 70% 감소 사례

YS
김영삼
조회 1173
NATS JetStream — Kafka 대체, 운영 부담 70% 감소 사례

핵심 요약

피크 8만 RPS Kafka 클러스터(9노드, Zookeeper 3, Schema Registry 2)를 NATS JetStream(3노드)으로 1년에 걸쳐 이관. 운영 인력 시간이 월 120h -> 36h로 70% 감소, 인프라 비용 53% 감소. 단, 분석 파이프라인(Flink·Spark) 호환과 초당 50만 메시지 이상 워크로드는 여전히 Kafka가 유리.

1. 왜 NATS인가

측면KafkaNATS JetStream
바이너리JVM+Zookeeper/KRaft단일 Go 바이너리(18MB)
최소 노드3+33
지연(p99)5~15ms0.8~3ms
처리량 한계매우 높음중상
KV·OBJECT별도 솔루션내장

2. Stream과 Consumer 모델

nats stream add ORDERS \
  --subjects "orders.>" \
  --storage file \
  --replicas 3 \
  --retention limits \
  --max-age 168h

nats consumer add ORDERS billing \
  --filter "orders.paid.>" \
  --ack explicit \
  --max-deliver 5

3. 마이그레이션 전략

단계방식기간
1. 미러링kafka-to-nats bridge로 양쪽 동시 발행2주
2. 컨슈머 이전서비스별로 NATS 구독으로 교체4개월
3. 프로듀서 이전발행 측 교체, Kafka 폐기3개월

4. KV 스토어

// Go
kv, _ := js.CreateKeyValue(ctx, jetstream.KeyValueConfig{
    Bucket: "sessions",
    TTL: 30 * time.Minute,
    History: 5,
})

kv.Put(ctx, "user:42", []byte("token"))

watcher, _ := kv.Watch(ctx, "user:>")
for entry := range watcher.Updates() {
    log.Println(entry.Key(), entry.Value())
}

5. 처리량 실측

시나리오JetStreamKafka 9노드
단일 stream 발행185K msg/s720K msg/s
p99 발행 지연2.4ms11ms
p99 e2e3.8ms14ms
월 인프라 비용$840$1,790

6. 운영 시간이 줄어든 진짜 이유

작업Kafka 월 시간NATS 월 시간
브로커 리밸런싱14h0h
Zookeeper/KRaft 운영22h0h
토픽 파티션 설계18h4h
모니터링·알람 튜닝12h6h
스키마 호환성20h8h

7. 한계

1) Flink·Spark Streaming 네이티브 connector가 빈약. 2) Schema Registry 같은 정식 스키마 거버넌스 부재. 3) 처리량 한계 — 50만 msg/s 넘어가면 Kafka가 답. 4) Confluent급 매니지드 생태계 부재.

8. 적합·부적합 정리

워크로드추천
마이크로서비스 이벤트 버스NATS
CDC + 데이터 레이크Kafka(Connect)
로그 집계 100K+/sKafka
엣지·IoT 다중 사이트NATS(leafnode)

참고

  • nats.io
  • docs.nats.io/jetstream
  • github.com/nats-io/nats-server

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록