Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

10장. Kafka 메모리 선택 가이드

Kafka는 데이터를 저장하고 처리하는 시스템입니다. 이 과정에서 가장 중요한 자원 중 하나가 바로 메모리(RAM) 입니다. 이 장에서는 Kafka 운영에 필요한 메모리 용량을 계산식 기반으로 추정하고, 각 메모리 용도의 산정 근거를 수식과 함께 설명합니다.


10.1 Kafka에서 메모리가 사용되는 영역

Kafka는 크게 다음 3가지 용도로 메모리를 사용합니다:

용도설명
Page Cache데이터를 디스크에 쓰기 전 OS가 잠시 보관하는 공간
JVM HeapKafka 내부 처리를 위한 Java 객체 저장 공간
네트워크/복제 버퍼메시지를 다른 브로커 또는 클라이언트로 전송하기 전 임시 저장 공간

10.2 Page Cache 용량 계산

Kafka 공식 문서에서는 쓰기 처리량 기반으로 Page Cache 메모리를 산정할 것을 권장합니다.

✅ 공식:

Page Cache 메모리 = 초당 쓰기 처리량(MB/s) × 30초
  • 예: 초당 쓰기 처리량이 200MB/s → 200 × 30 = 6,000MB = 6GB
  • 운영 경험에 따른 안정적 버퍼 확보 시간(30초)을 기준으로 합니다.

10.3 JVM Heap 용량 계산

JVM Heap은 Kafka가 내부 상태, 파티션 정보, 요청 큐 등을 관리하기 위해 사용하는 메모리입니다.

✅ 공식 (경험 기반):

JVM Heap (GB) = (브로커의 파티션 수 ÷ 1000) × 1.5~2GB
단, 최대 16GB 이내
  • 예: 브로커가 5,000개 파티션 → 5,000 ÷ 1000 × 2 = 10GB

JVM Heap은 16GB 이상 설정 시 GC 효율 저하, Compressed OOPs 비활성화 등의 문제가 발생하므로 제한하는 것이 일반적입니다.


10.4 네트워크/복제 버퍼 메모리 계산

Kafka는 데이터를 전송할 때 메모리 버퍼를 사용합니다. 이때 리더는 팔로워 수만큼 데이터를 메모리에 유지하게 됩니다.

✅ 공식:

네트워크/복제 버퍼 (bytes) = 초당 메시지 수 × 평균 메시지 크기(bytes) × (1 + 복제 팔로워 수) × 평균 버퍼 유지 시간(초)
  • 예:
    • 메시지 수: 10,000 msg/s
    • 메시지 크기: 1,024 bytes
    • 복제 계수: 3 (팔로워 2명)
    • 유지 시간: 1초
= 10,000 × 1024 × 3 × 1 = 30,720,000 bytes ≈ 29.3MB
  • 보수적으로 2 ~ 3초 버퍼링을 고려해 약 60 ~ 90MB 정도 확보 필요

10.5 JVM 외 메모리 고려 사항

JVM은 Heap 외에도 다양한 메모리 공간을 자동으로 사용합니다:

영역설명기본 예상
Metaspace클래스 정보 등수백 MB
Thread Stack스레드당 1MB수백 스레드 운영 시 수백 MB
Direct Memory네이티브 I/O, Netty 등수백 MB ~ 수 GB
Code CacheJIT 컴파일 코드수십~수백 MB

➡️ 총합: Heap 외 JVM 메모리로 약 1~4GB 이상 예상


10.6 전체 메모리 계산 요약

Kafka 노드 하나에 필요한 메모리는 아래와 같이 계산됩니다:

✅ 공식:

전체 메모리 ≈
(Page Cache) +
(JVM Heap) +
(네트워크/복제 버퍼) +
(JVM Heap 외 메모리) +
(운영 여유 공간)

📌 각 항목의 조건 요약:

항목계산 조건
Page Cache쓰기 처리량(MB/s) × 30초
JVM Heap(파티션 수 ÷ 1000) × 2, 단 최대 16GB
네트워크/복제 버퍼메시지 수/s × 메시지 크기 × (1 + 팔로워 수) × 유지 시간(초)
JVM 외 메모리고정값 아님, 일반적으로 1~4GB 예상
운영 여유 공간시스템 예외 상황 대비용, 일반적으로 2~4GB 확보 권장

예시:

  • Page Cache = 6GB (200MB/s × 30초)
  • JVM Heap = 10GB (5,000파티션)
  • 네트워크/복제 버퍼 = 90MB (보수적 3초 기준)
  • JVM 외 메모리 = 3GB
  • 여유 공간 = 4GB

→ 총 메모리: 약 23GB 권장


✅ 정리

  • Kafka 메모리 구성은 모두 수치 기반 계산식으로 추정 가능합니다.
  • 설정 기준:
    • Page Cache: 쓰기 처리량 기반
    • Heap: 파티션 수 기반
    • 복제 버퍼: 메시지 수 × 크기 × 복제 수 × 유지시간
  • JVM Heap 외 메모리도 시스템 수준에서 반드시 고려해야 함
  • 전체 메모리는 운영 환경에 맞게 여유 있게 확보하는 것이 핵심입니다.