분산 시스템
네트워크 상으로 연결된 컴퓨터 그룹을 말하며 단일 시스템보다 높은 성능을 목표로 한다. 이러한 분산 시스템은 서버 또는 노드 등에 장애가 발생할 때 다른 서버 또는 노드에서 처리하므로 장애 대응이 탁월하다. 리소스 한계치에 도달했을 경우 브로커를 추가하는 방식으로 확장이 가능하다.
페이지 캐시
카프카는 높은 처리량을 얻기 위해 몇 가지 기능을 추가했는데 대표적인 것이 페이지 캐시의 이용이다. 페이지 캐시는 직접 디스크에서 읽고 쓰는 대신 애플리케이션이 사용하지 않는 일부 잔여 메모리를 활용하는 기술이다. 카프카는 이를 이용해 디스크IO를 줄여 성능을 높일 수 있다.
배치 전송 처리
카프카는 프로듀서와 컨슈머 클라이언트와 많은 메시지를 주고 받는데 이 수많은 토신을 묶어서 처리하면 오버헤드도 줄일 수 있고 장기적으로도 더 빠르고 효율적으로 처리할 수 있다. 단건의 메시지를 처리하기 위해 여러번 통신을 하는 것보다는 한번에 여러 메시지를 보내는 것이 비용이 더 적으며 메시지의 지연이 적어질 것이다.
압축 전송
카프카는 메시지 전송 시 성능이 높은 압축 전송을 사용하는 것을 권장한다. 카프카에서 지원하는 압축 타입은 gzip, snappy, lz4, zstd등이다. 파일 하나를 압축하는 것보다 비슷한 파일 10개이상을 압축하는 쪽의 효율이 더 높기 때문이다. 압축 타입에 따라서 약간의 특성이 있어서 일반적으로 높은 압축률이 필요한 경우라면 gzip, zstd를 권장하고 빠른 응답속도가 필요하다면 lz4나 snappy를 권장한다.
토픽, 파티션, 오프셋
카프카는 토픽이라는 곳에 데이터를 저장한다. 토픽은 병렬처리를 위해 파티션이라는 단위로 나뉜다. 이러한 파티셔닝 방법으로 높은 처리량을 수행할 수 있다. 파티션의 메시지가 저장되는 위치를 오프셋이라고 부르며 오프셋은 순차적으로 증가하는 숫자(64비트 정수) 형태로 되어있다.
고가용성 보장
카프카는 분산 시스템이기 때문에 하나의 서버나 노드가 down되어도 다른 서버가 역할을 대신해 안정적인 서비스가 가능하다. 카프카에서는 리플리케이션 기능을 제공한다. 리플리케이션은 토픽의 파티션을 복제한다. 리더 파티션과 팔로워 파티션이 존재하며 팩터수를 조절할 수 있다. 팔로워가 많을 수록 안정적일 수는 있지만 디스크 공간이 소비되므로 이상적인 팩터 수를 유지해야한다.
주키퍼의 의존성
아파치 카프카를 비롯해 하둡, 나이파이, 에이치베이스 등 많은 분산 애플리케이션에서 코디네이터 역할을 하는 애플리케이션으로 사용되고 있다. 주키퍼는 여러 대의 서버를 앙상블(클러스터)로 구성하고 살아 있는 노드 수가 과반수 이상 유지된다면 지속적인 서비스가 가능한 구조이다. 따라서 주키퍼는 반드시 홀수로 구성해야한다.
znode를 이용해 카프카 메타 정보가 주키퍼에 기록되고 이러한 지노드를 이용해 브로커의 노드 관리, 토픽 관리, 컨트롤러 관리 등 매우 중요한 역할을 하고 있다.
출처
실전 카프카 개발부터 운영까지 - 고승범 지음