1.시스템&인프라/Apache Kafka

9. Kafka 하드웨어 요구사항 및 JVM 옵션 정리: KRaft 모드

쿼드큐브 2025. 3. 31. 14:47
728x90
반응형

Kafka를 운영하기 위한 하드웨어 권장 사양과 JVM 옵션을 정리했습니다.
성능 저하 없이 안정적인 Kafka 클러스터를 구성하려면 CPU, RAM, 저장장치, 네트워크, 파일시스템까지 고려해야 합니다.

 

Kafka 하드웨어 요구사항 및 JVM 옵션 정리: KRaft 모드

 

목차

1. Kafka 하드웨어 요구사항 요약

2. CPU 요구사항

3. 메모리(RAM) 구성

4. 저장장치(Storage) 권장 사항

5. 네트워크 및 파일 시스템

6. Kafka용 JVM 욥션 설정

7. 대규모 Kafka 운영 예시

관련 글 링크

 

 

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

 

728x90
반응형