[Kafka] 카프카 브로커의 이해

Posted by 김성철

##Kafka - 카프카 브로커의 이해

카프카 브로커란

- 카프카 클러스터 내에 존재하는 서버  
- 카프카 클라이언트와 데이터를 주고받는 주체  
- 데이터를 분산 저장, 복제  
- 기본 3대 이상의 브러코 서버를 1개의 클러스터로 관리  

데이터 저장

- 프로듀서로부터 데이터를 받으면 토픽의 파티션에 데이터를 저장  
- 파일시스템에 저장함  
- 파일시스템에 저장하므로 File I/O로 인해 속도 이슈 발생 가능  
- Page Cache를 통해 디스크 입출력 속도를 높임  
- 컨슈머가 데이터 요청 시, 파티션에 저장된 데이터를 전달  
* Page Cache(페이지 캐시) :  
	파일 입출력 성능 향상을 위해 OS에 만든 메모리 영역  
	읽은 파일 내용은 이 캐시에 저장하고, 동일 파일을 다루면 캐시 메모리에서 직접 읽음  
	이 때문에 힙 메모리 사이즈를 크게 설정하지 않아도 됨  

데이터 복제

- 데이터 복제를 통해 고가용성 달성  
- 장애 허용 시스템  
- 카프카의 데이터 복제는 파티션 단위로 함  
- Replication Factor 설정  
- 리더 팔로워 방식  
  
- 팔로워는 리더 파티션 오프셋 확인, 차이가 나면 리더로부터 가져와 저장  
- 2이상 replication factor 설정을 권장  

데이터 삭제

- 카프카 컨슈머나 프로듀서는 데이터 삭제 불가능  
- 오직 브로커에서만 데이터 삭제가 가능함  
- 데이터 삭제는 파일 단위로 이루어짐  
- 해당 파일 단위가 로그 세그먼트 (log segment)  
- 카프카 브로커에 log.segment.bytes 또는 log.segment.ms 옵션에 값이 설정되면 세그먼트 파일이 닫힘  
- 닫힌 세그먼트 파일은 log.retention.bytes 또는 log.retention.ms 옵션에 설정 값이 넘으면 삭제됨  

컨트롤러

- 브로커의 health 체크  
- FailVoer 과정 , Leader 선정  
- 컨트롤러 역할을 하는 브로커에 장애가 발생하면 다른 브로커가 이 역할을 맡음  

코디네이터

- 컨슈머 그룹 상태 체크  
- 파티션과 컨슈머의 매칭, 분배 설정  
- 리밸런싱  
	컨슈머가 컨슈머 그룹에서 빠지게 되면 매칭되지 않은 파티션을 다른 컨슈머로 할당