내부적으로 Kafka는 데이터를 디스크에 추가 전용 로그(segment로 조직)로 저장하고, 효율적인 I/O 기법을 사용하며, 클러스터 메타데이터를 ZooKeeper(과거) 또는 KRaft(현재)로 관리합니다. 내부를 이해하면 Kafka의 동작과 성능에 대한 이해가 깊어집니다.
커밋 로그 저장
각 partition은 디스크에 저장된 추가 전용 LOG로, SEGMENT(파일)로 분할:
→ 새 이벤트가 끝에 APPEND됨(순차 쓰기 → 빠름)
→ 이벤트는 한 번 쓰면 불변; OFFSET으로 식별
→ 오래된 segment는 삭제(보존) 또는 compaction
→ INDEX가 offset을 파일 위치에 매핑(빠른 조회)
→ 추가 전용 로그가 Kafka 설계의 핵심(내구성, 순차적, 효율적)
효율성 기법
✓ 순차 I/O → 로그에 추가는 순차 디스크 접근 → 매우 빠름(랜덤 I/O 대비)
✓ ZERO-COPY(sendfile) → 앱을 통한 복사 없이 디스크에서 네트워크로 데이터 전송
→ 매우 효율적 읽기
✓ OS PAGE CACHE → Kafka는 자체 캐시 대신 OS 캐시(메모리의 최근 데이터)에 의존
→ 최근 데이터의 빠른 읽기
✓ 배치, 압축 → 효율적 I/O
→ 이것들이 Kafka를 디스크를 쓰면서도 극도로 빠르게 함
