Kafka를 운영하기 위한 하드웨어 권장 사양과 JVM 옵션을 정리했습니다.
성능 저하 없이 안정적인 Kafka 클러스터를 구성하려면 CPU, RAM, 저장장치, 네트워크, 파일시스템까지 고려해야 합니다.
Kafka 하드웨어 요구사항 및 JVM 옵션 정리: KRaft 모드
목차
1. Kafka 하드웨어 요구사항 요약
Kafka는 높은 처리량과 실시간 성능을 요구하는 분산 메시지 시스템입니다.
아래는 Kafka 브로커를 구축할 때 권장되는 하드웨어 사양입니다:
구성요소권장 사양주요 고려사항
구성요소 | 권장사양 | 주요 고려사항 |
CPU | 24코어 이상 (멀티코어 중심) | 빠른 클럭보다는 코어 수가 중요, 병렬 처리 성능 확보 |
RAM | 32GB 이상 (64GB 권장) | JVM 힙은 6GB만 사용하고, 나머지는 OS 페이지 캐시로 활용 |
저장장치 | NVMe SSD 1TB 이상 (RAID 10 권장) | NAS 금지, OS 디스크와 데이터 디스크는 분리 |
네트워크 | 10GbE 이상 | 브로커 간 지연 시간 30ms 이하 유지 필요, 장거리 클러스터 비권장 |
파일 시스템 | XFS 또는 ext4 | XFS는 고성능, ext4는 안정성 및 장기 지원에 유리 |
2. CPU 요구사항
Kafka는 멀티코어 CPU에 최적화되어 있습니다.
데이터 압축이나 SSL 암호화 기능을 사용하는 경우, CPU 리소스 사용량이 증가할 수 있습니다.
- 24코어 이상을 권장
- 클럭 속도보다 다중 코어의 병렬 처리 성능이 더 중요
- 로그 압축, 메시지 인코딩 등의 작업이 CPU 사용량에 큰 영향을 줌
3. 메모리(RAM) 구성
Kafka는 JVM 힙 메모리와 OS 페이지 캐시를 함께 활용합니다.
힙 메모리는 6GB 정도로 충분하며, 나머지 RAM은 캐시 용도로 사용됩니다.
- 32GB 이상 RAM 권장 (64GB 이상도 고려 가능)
- Kafka는 메모리를 통해 Producer/Consumer 데이터를 효율적으로 버퍼링함
- 힙 설정: -Xmx6g -Xms6g 수준이면 충분
메모리 계산 공식:
- write_throughput * 30 → 30초치 데이터 버퍼를 위한 메모리 용량 추정
예시
- 브로커 1대가 시간당 20GB 쓰는 경우
- Consumer가 3시간까지 지연 허용 시
- 20GB * 3 = 60GB → 페이지 캐시에 최소 60GB 필요
4. 저장장치(Storage) 권장 사항
Kafka의 I/O는 순차적으로 디스크에 기록되기 때문에 고성능 디스크가 요구됩니다.
- NVMe SSD 및 RAID 10 권장
- RAID 5/6는 성능 저하 우려로 비추천
- NAS 사용 금지: 성능 편차 심하고 SPOF(단일 실패 지점) 위험
- OS 및 Kafka 데이터 디스크 분리 필수
SSD는 Kafka의 디스크 I/O 방식 상 성능 향상이 제한적일 수 있으나, 고성능 환경에서는 NVMe 고려 가능
5. 네트워크 및 파일 시스템
Kafka는 빠르고 안정적인 네트워크가 매우 중요합니다.
- 10GbE 이상 네트워크 인터페이스 추천
- 브로커 간 지연은 30ms 이하 유지 필요
- 장거리 클러스터 구성은 비추천
파일시스템 | 특징 |
XFS | 고성능, 대규모 처리에 유리, RHEL 기본 파일 시스템 |
ext4 | 안정성 높고 장기 지원 가능, 범용 서버 환경에 적합 |
6. Kafka용 JVM 옵션 설정
Kafka는 OpenJDK 또는 Oracle JDK에서 다음과 같은 JVM 옵션을 통해 성능을 최적화할 수 있습니다.
-Xmx6g -Xms6g
-XX:MetaspaceSize=96m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
-XX:G1HeapRegionSize=16M
-XX:MinMetaspaceFreeRatio=50
-XX:MaxMetaspaceFreeRatio=80
-XX:+ExplicitGCInvokesConcurrent
옵션 | 설명 |
-Xmx6g -Xms6g | 최대(-Xmx) 및 최소(-Xms) 힙 크기를 6GB로 설정하여 동적 확장 오버헤드를 줄임 |
-XX:MetaspaceSize=96m | JVM의 메타스페이스(Metaspace) 초기 크기를 96MB로 설정 (클래스 및 메서드 정보 저장) |
-XX:+UseG1GC | G1GC(Garbage-First Garbage Collector)를 활성화하여 효율적인 가비지 컬렉션 수행 |
-XX:MaxGCPauseMillis=20 | GC(가비지 컬렉션) 최대 정지 시간을 20ms로 제한하여 애플리케이션 응답성을 유지 |
-XX:InitiatingHeapOccupancyPercent=35 | 힙 사용률이 35%에 도달하면 GC를 트리거하도록 설정하여 안정적인 메모리 관리 수행 |
-XX:G1HeapRegionSize=16M | G1GC의 힙 영역(Region) 크기를 16MB로 설정하여 객체 크기에 맞게 효율적으로 메모리 사용 |
-XX:MinMetaspaceFreeRatio=50 | 메타스페이스(Metaspace)의 최소 여유 공간 비율을 50%로 설정하여 GC 오버헤드 감소 |
-XX:MaxMetaspaceFreeRatio=80 | 메타스페이스의 최대 여유 공간 비율을 80%로 설정하여 클래스 메타데이터 관리를 최적화 |
-XX:+ExplicitGCInvokesConcurrent | System.gc() 호출 시 동시 GC를 트리거하여 애플리케이션 멈춤 현상 방지 |
7. 대규모 Kafa 운영 예시
LinkedIn의 대규모 Kafka 클러스터 사례:
- 60대의 브로커
- 50,000개의 파티션 (복제 계수 2)
- 초당 80만 개 메시지 수신
- 초당 300MB 수신 / 1GB 이상 송신 트래픽
- 각 브로커의 GC 정지 시간 90% 기준 약 21ms
- 초당 1회 미만의 Young GC 발생
Kafka 하드웨어 요구사항과 JVM 옵션을 정리했습니다.
Kafka의 성능을 극대화하려면 멀티코어 CPU, 충분한 RAM, NVMe SSD, 빠른 네트워크, 최적의 파일 시스템을 갖춘 인프라가 필요합니다.
또한 JVM 옵션을 적절히 설정하면 GC 오버헤드를 줄이고 안정적인 운영이 가능합니다.
관련 글 링크
https://medium.com/@akash.d.goel/kafka-hardware-requirements-9328886fe88f
Kafka Hardware Requirements
Kafka Hardware Requirements
medium.com
'1.시스템&인프라 > Apache Kafka' 카테고리의 다른 글
11. Kafka 3.9 노드 구성별 server.properties 예시: KRaft 모드 (0) | 2025.03.31 |
---|---|
10. Kafka 3.9 KRaft 모드 설치 (JDK 17 + 단일 노드 구성) (0) | 2025.03.31 |
8. Kafka Consumer 동작 이해하기: Polling, Offset, Commit (0) | 2025.03.31 |
7. Kafka Producer acks 설정 및 동작 이해하기: 데이터 유실 방지 (0) | 2025.03.31 |
6. Kafka 프로듀서 파티션 할당 방식(Round Robin vs Sticky 비교) (0) | 2025.03.28 |