카프카란?
실시간으로 대용량 테이터를 게시, 구독, 저장 및 처리할 수 있는 분산 이벤트 스트리밍 플랫폼
카프카 구성요소
[카프카 클러스터]
브로커(Broker)
- 카프카 서버를 의미
- 클러스터 내에 여러개의 브로커가 구성될 수 있다
- 브로커 내부에 여러 토픽들이 생성될 수 있고 이러한 토픽들에 의해 생성된 파티션들이 보관하는 데이터에 대해 분산 저장을 하거나 장애 발생 시, 안전하게 데이터를 사용할 수 있도록 관리하는 역할을 한다
컨트롤러(Controller) : 클러스터 내의 브로커가 장애 발생으로 인하여 작동하지 않는 경우 해당 브로커에 존재하는 리더 파티션을 재분배 한다
- 클러스터의 다수 브로커 중 한 대가 컨트롤러의 역할을 맡음
- 만약 컨트롤러 역할을 하는 브로커에 장애가 발생 시 다른 브로커가 컨트롤러 역할을 한다
코디네이터(Coordinator) : 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배하는 역할을 한다
- 클러스터의 다수 브로커 중 한 대가 코디네이터의 역할을 맡음
- 컨슈머 그룹 내의 컨슈머에 장애 발생 확인 시 해당 컨슈머에 매칭 된 파티션을 다른 정상 컨슈머에 매칭해주는 역할을 한다
- 파티션을 컨슈머에게 재할당하는 과정을 리밸런스(Rebalance)라고 한다
[카프카 클라이언트]
프로듀서(Producer)
카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 전송하는 역할. 프로듀서는 데이터를 전송할 때 리더 파티션을 가지고 있는 카프카 브로커와 직접 통신을 한다
컨슈머(Consumer)
적재된 데이터를 사용하기 위해 브로커로부터 데이터를 가져와 필요한 처리를 하는 역할
컨슈머 그룹(Consumer Group) : 카프카 컨슈머는 하나 이상의 컨슈머가 컨슈머 그룹을 구성하여 하나의 토픽을 구독할 수 있다
- ex) 브로커 내에 A, B, C 파티션이 존재할 시 그룹 내 컨슈머1은 A 파티션을, 컨슈머2가 B, C 파티션을 구독하고 있는 형태
- 브로커는 성능을 위해 하나의 토픽을 여러 파티션으로 병렬 구성하여 처리하기 때문에 둘 이상의 파티션을 하나의 컨슈머로 처리한다면 성능 상의 문제가 발생할 수 있어 그룹으로 구성하여 사용
- 컨슈머 그룹 내의 1개의 컨슈머는 여러개의 파티션에 할당될 수 있으므로 컨슈머의 개수는 가져가고자하는 토픽의 파티션 개수보다 같거나 작아야 함
- 컨슈머 그룹에 장애 등의 이유로 인해 컨슈머가 추가되거나 이탈하는 것과 같은 상태가 변경될 시 그룹 내부에서 파티션의 소유권이 재조정 됨(Rebalancing)
주키퍼(Zookeeper)
분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스이다
- 카프카에서는 메타데이터를 저장하기 위해서 사용된다.
- 최신 버전에서는 주키퍼가 제거될 예정이다
- 외부에 메타데이터를 저장하면 컨트롤러의 in-memory 상태가 외부 상태로부터 비동기화될 수 있음
- 두 개의 시스템을 사용한다는 것은 많은 복제를 야기하였다
- 메타데이터를 외부에 저장함으로 인한 카프카의 확정성 제한