이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
Kafka 디자인 특징
- 분산 시스템, 페이지 캐시, 배치 전송 처리 등의 기능을 구현했다.
분산 시스템
-
같은 역할을 하는
여러 대의 서버로 이뤄진 서버 그룹을 분산 시스템이라 한다.
장점
- 단일 시스템보다 더 높은 성능을 얻을 수 있다.
-
분산 시스템 중
하나의 서버 또는 노드 등이 장애가 발생하면
다른 서버 또는 노드가 대신 처리한다.
-
시스템 확장이 용이하다.
물론 불필요하게 서버를 추가하면 불필요한 비용이 증가하게 된다.
Example
물리적인 서버 1대가 있다.
이 서버는 초당 1000개의 메시지를 받게 되면
CPU 사용률이 100% 도달한다.
즉 서버의 최대 처리 수준은 1000메시지/초이다.
만약 초당 900개의 메시지가 들어온다면?
이 서버의 사용률은 90%에 도달한다.
장애 상황은 아니지만 위험하다.
여기서
서버 1대를 추가하여
분산 시스템을 구축한다면
각 서버마다 450개의 메시지를 처리하면서
서버의 사용률은 45%가 된다.
서버를 분산함으로써
단일 서버보다 2배의 성능을 처리할 수 있고
서버 1대가 장애가 발생하더라도
나머지 1대가 장애가 발생한 서버를 대신해
작업을 처리할 수 있어 안전성도 높아진다.
페이지 캐시
-
Kafka는 처리량을 높이기 위한 기능을 몇 가지 추가했고
그 중 하나가 페이지 캐시를 이용하는 것이다.
OS <-> 페이지 캐시
-
OS는 물리적 메모리에
Application이 사용하는 부분을 할당하고
남은 잔여 메모리 일부를 페이지 캐시로 유지해
디스크에 I/O 작업을 하지않기 때문에
OS의 전체적인 성능을 높힐 수 있다.
-
그리고 Kafka는 이러한 특징을 이용해
빠른 액세스를 하기 위해
OS의 페이지 캐시를 이용하도록 디자인되었다.
-
이런 장점 때문에
실제로 Kafka 문서에도
Kafka를 구성할 때
디스크 중에서 가격이 가장 저렴한
SATA 디스크 를 사용하여 운영한다.
배치 전송 처리
-
데이터를 주고받는 과정에서는 I/O가 발생한다.
-
Kafka에서는 I/O를 줄이기 위해
작은 단위의 I/O들을 묶어서 배치 작업으로 처리한다.
Example
메시지 전송 시간 : 1초
메시지 4개를 각각 전송한다면?
총 4초가 소요
만약 이 메시지들을 묶어서 전송한다면?
총 1초가 소요
-
이러한 배치 작업은
속도 향상에 매우 큰 도움을 준다.
Summary
-
Kafka도 분산 시스템이기 때문에
유동적으로 서버 증설이 가능하다.
-
또한 캐시 개념을 사용하여
성능 향상을 시켰고
-
배치 작업을 통해
I/O요청을 줄여 속도를 향상시켰다.