Search
🙊

카프카는 왜 빠를까?

Intro::

카프카가 빠른 이유에 대해 정리한 내용입니다.

개요

아파치 카프카(Kafka)는 대용량 데이터 스트리밍을 안정적으로 처리하기 위해 설계된 메시징 시스템입니다.
높은 처리량을 유지하면서도 디스크 I/O 성능을 극대화할 수 있는 구조를 가지고 있습니다.

디스크 I/O 최적화를 위한 핵심 설계 요소

1.
로그 구조 저장(Log-Structured Storage)
모든 메시지를 순차적으로 기록하는 append-only 방식입니다.
순차 쓰기 방식은 디스크 헤드 이동을 최소화하여 성능을 높입니다.
2.
세그먼트 파일 분할(Segment Files)
하나의 큰 로그 파일 대신에 여러 개의 작은 세그먼트 파일로 나눠 저장합니다.
파일 단위로 세분화하면 관리가 편리해지고, 오래된 세그먼트를 삭제하거나 압축하기 쉬워집니다.
3.
운영체제 페이지 캐시 활용(Page Cache)
카프카는 OS의 페이지 캐시에 데이터를 남겨두어 재읽기(read) 비용을 줄입니다.
디스크에서 직접 데이터를 읽기보다 메모리에서 빠르게 제공할 수 있습니다.
4.
제로 카피 전송(Zero-Copy Transfer)
네트워크 전송 시 sendfile() 같은 시스템 콜을 사용하여 데이터를 커널 공간에서 바로 클라이언트로 전달합니다.
애플리케이션 레벨로 데이터를 복사하는 과정을 생략해 CPU 사용량과 메모리 복사를 줄입니다.
5.
배치 처리(Batching) 및 압축(Compression)
다수의 메시지를 하나의 배치(batch)로 묶어 디스크에 기록하고 전송합니다.
배치 크기를 키우면 디스크 I/O 호출 횟수와 네트워크 패킷 수를 줄일 수 있습니다.
필요에 따라 압축을 적용해 저장 용량과 전송량을 절감합니다.

동작 흐름 예시

1.
프로듀서가 메시지를 보내면 내부 배퍼에 일정량을 모읍니다.
2.
배치 크기나 시간 제한에 도달하면 세그먼트 파일 끝에 순차 쓰기 방식으로 저장합니다.
3.
운영체제 페이지 캐시에 남은 데이터를 컨슈머가 빠르게 읽어갑니다.
4.
네트워크 전송 시 제로 카피 방식을 활용해 효율적으로 전달합니다.

효과

높은 처리량: 순차 쓰기와 배치 처리 덕분에 초당 수백 메가바이트 이상의 입출력이 가능합니다.
낮은 지연 시간: 페이지 캐시와 제로 카피 덕분에 디스크 I/O와 네트워크 전송 지연을 최소화합니다.
경제적인 운영: 디스크와 네트워크 리소스를 효율적으로 사용해 비용을 절감합니다.
이와 같은 설계를 통해 카프카는 대용량 스트리밍 처리 시스템에서도 디스크 I/O 성능을 극대화할 수 있습니다.

References::