카프카 브로커, 클러스터, 주키퍼에 대해서

브로커, 클러스터, 주키퍼

Featured image

브로커

카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자. 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션

한 개의 서버당 하나의 브로커 프로세스가 실행된다. 브로커 서버 한 대로도 기본 기능은 충분히 실행되지만 replication을 통해 데이터를 안전하게 보관하려면 최소 3대 이상의 브로커 서버를 1개의 클러스터로 묶어 운영하는 것이 좋다.

이렇게 구성된 하나의 클러스터는 주키퍼와 연동되어 동작하게 된다.

데이터 저장 관리

카프카는 메모리나 캐시가 아닌 파일 시스템에 저장되기 때문에 데이터는 안전하게 보장될 수 있지만 속도에 의문이 들수 있다. 하지만 이를 페이지 캐시를 사용함으로써 디스크 입출력 속도를 높여 해결하였다.

페이지 캐시란 OS에서 파일 입출력의 성능 향상을 위해 만들어진 메모리 영역을 말한다.

따라서 파일 형태로 데이터를 다루기 때문에 힙 메모리를 크게 설정할 필요는 없다.

데이터 복제(replication)

카프카의 데이터 복제는 파티션 단위로 발생한다. 데이터 replication과 관련된 카프카 설정으로 acks 옵션이 있는데 0, 1, -1(all) 과 같은 설정 값에 따라 데이터 유실 가능성이 달라진다.

acks=0 : 브로커에 데이터 저장여부와 상관 없이 프로듀서에서 데이터를 전송한 즉시 성공으로 판단 acks=1(기본값) : 리더 파티션에 데이터가 저장되면 성공으로 판단 acks=-1/all : replication 옵션 설정(min.insync.replicas)된 모든 브로커 리더/팔로워 파티션에 데이터가 저장되면 성공으로 판단

복제 과정은 이렇다. 팔로워 파티션들은 리더 파티션의 오프셋을 확인하여 현재 자신이 가지고 있는 오프셋과 차이가 나는 경우 리더 파티션으로부터 데이터를 가져와서 자신의 파티션에 저장하는 과정으로 발생된다.

컨트롤러

컨트롤러는 브로커들의 상태를 체크하여 리더 파티션 지정을 관리한다. 이는 다수의 브로커 중 한대가 그 역할을 수행한다.

데이터 삭제

데이터 삭제는 오직 브로커만이 수행할 수 있다.

데이터 삭제는 파일단위로 이뤄지는데 이 단위를 로그 세그먼트라고 부른다. 여기엔 다수의 데이터가 들어있기 때문에 데이터베이스 처럼 원하는 데이터만 삭제할 순 없다.

코디네이터

코디네이터는 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배하는 역할을 한다.

컨트롤러와 마찬가지로 코디네이터도 다수의 브로커 중 한대가 그 역할을 수행한다.

컨트롤러는 브로커의 상태를 체크하여 리더 파티션을 관리, 코디네이터는 컨슈머의 상태를 체크하여 파티션과 컨슈머 매칭을 관리

이렇게 파티션을 컨슈머로 재할당하는 과정을 리밸런스(rebalance)라고 한다.

주키퍼는 카프카의 메타데이터를 관리한다.