Kafka를 운영하다 보면 문득 이런 생각이 든다.
생각보다 빠르고 튼튼한데, 이게 가능하려면 OS나 디스크 수준에서 무슨 일이 벌어지는 걸까.
이 편에서는 브로커 내부를 하드웨어 시점에서 다시 훑어본다.
눈에 보이는 설정들 뒤에서 실제로 어떤 흐름이 만들어지는지 이해하면, 튜닝의 방향이 자연스럽게 잡힌다.
Kafka는 메시지를 파일로 기록하는 방식이다.
그렇다고 전통적인 DB처럼 이리저리 파일 포인터를 옮기는 방식은 아니다.
브로커가 하는 일은 오직 하나에 가깝다.
딱 정해진 파일 끝으로 계속 데이터를 밀어 넣는 것.
이 단순한 패턴은 디스크가 가진 물리적 성능과 아주 잘 맞아떨어진다.
OS는 이 패턴을 감지할 때 여러 최적화를 수행한다.
페이지 캐시에 데이터를 계속 쌓고, flush 타이밍을 조절하고, 필요하면 디스크에 순차적으로 배치한다.
Kafka는 이 과정을 굳이 직접 통제하려 하지 않는다.
오히려 OS에게 맡기고, 자신은 그저 append 작업만 꾸준히 유지한다.
이 구조 덕분에, 브로커가 높은 처리량에도 잘 버틴다.
브로커가 병목 없이 버티려면 결국 물리 자원이 뒷받침되어야 한다.
그중에서도 가장 핵심이 되는 자원은 세 가지다.
메모리