Kafka Broker

카프카 브로커란

  • 카프카 클라이언트와 데이터를 주고받기 위해 필요하며 데이터를 분산 저장하여 장애 발생 시에도 안전하게 사용할 수 있도록 하는 프로세스이다.

  • 하나의 서버에 한 개의 카프카 브로커 프로세스를 실행할 수 있다.

  • 프로듀서로부터 데이터를 받으면 토픽의 파티션에 데이터를 저장하고, 컨슈머로부터 요청 받으면 파티션에 저장된 데이터를 전달한다.

  • 데이터 저장 시 메모리, 데이터베이스, 캐시를 사용하는 대신 페이지 캐시와 파일 시스템을 사용해 안전하고 빠르게 데이터에 접근할 수 있다.

카프카 브로커의 역할

복제

  • 데이터 복제는 파티션 단위로 이루어지며, 토픽 생성 시 파티션의 복제 개수를 지정할 수 있다.

  • 프로듀서, 컨슈머와 직접 통신하는 파티션을 리더라고 하고, 복제 데이터를 가지는 나머지 파티션들을 팔로워라고 부른다.

  • 팔로워 파티션들은 리더 파티션의 오프셋과 현재 자신이 가지는 오프셋을 비교하여 차이가 나는 경우 리더 파티션의 데이터를 가져와서 저장한다.

컨트롤러

  • 클러스터에 속하는 브로커 중 하나는 컨트롤러 역할을 담당한다.

  • 다른 브로커들의 상태를 확인하고 브로커가 클러스터에서 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 재분배한다.

  • 컨트롤러 역할을 하는 브로커에 장애가 생기면 다른 브로커가 컨트롤러 역할을 한다.

데이터 삭제

  • 컨슈머나 프로듀서는 직접 데이터를 삭제할 수 없으며 브로커에 삭제 요청을 보내야 한다.

  • 데이터 삭제는 로그 세그먼트라는 파일 단위로 이루어지며, 세그먼트에는 다수의 데이터가 들어있어 특정 데이터를 선별해 삭제할 수 없다.

  • 따라서 세그먼트 단위의 용량과 유지 기간에 대한 옵션을 신중히 설정해야 한다. 세그먼트 파일 용량을 작게 줄이면 데이터를 저장하는 동안 자주 새롭게 열고닫기 때문에 부하가 발생할 수 있다.

  • 데이터를 삭제하지 않고 메시지 키를 기준으로 오래된 데이터를 압축할 수도 있다.

컨슈머 오프셋 저장

  • 컨슈머 오프셋이란 토픽이 특정 파티션으로부터 데이터를 가져가 처리할 때 어느 레코드까지 가져갔는지 확인하기 위해 커밋하는 값이다. 오프셋을 커밋하면 __consumer_offsets 토픽에 저장된다.

  • 컨슈머들은 이 오프셋을 기반으로 하여 다음 레코드를 조회한다.

코디네이터

  • 클러스터에 속하는 브로커 중 하나는 코디네이터 역할을 한다.

  • 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배한다.

  • 만약 컨슈머가 그룹에서 빠질 경우 매칭이 해제된 파티션을 다른 컨슈머에 재할당하는 리밸런스 기능을 제공한다.

Last updated