카프카 클러스터(Kafka Cluster)
- 카프카의 컨슈머(Consumer), 프로듀서(Producer), 브로커(Broker), 토픽(Topic)들은 모두 다 클러스터를 이루어서 서빙된다.
- 카프카의 확장성과 고가용성이 모두 클러스터를 이루고 있다는 사실에서 나오게 된다.
- 카프카 클러스터는 여러개의 카프카 브로커(서버)를 가질 수 있다.
- 카프카 토픽을 생성하면 모든 카프카 브로커에 생성된다.
- 토픽 A를 생성할 때 브로커가 여러개면 동시에 생기게 된다.
- 카프카 파티션은 여러 브로커에 걸쳐서 생성된다.
- 토픽 A에 파티션이 여러개 있다면 모두 나뉘어 생성된다.
키(Key)가 없는 메세지(Messages)
- 프로듀서가 메세지를 게시하면 라운드-로빈(Round-Robin) 방식으로 파티션에 분배된다.
키(Key)가 있는 메세지(Messages)
- 같은 키를 가진 메세지들은 같은 파티션에 보내진다.
리플리케이션 팩터(Replication Factor)
- 브로커가 3개 있고 파티션이 0부터 3까지 있을 때, 리플리케이션 팩터가 2일 경우에는 파티션이 두 개의 브로커에 담긴다는 뜻이다.
- 파티션 0은 중간에 있는 브로커 1로 가게 되고, 파티션 1은 브로커 3으로 가게 되며 파티션 2는 브로커 1로 가게 된다.
- 파티션 하나가 망가졌을 경우에도 리플리케이션 팩터가 2일 경우 파티션 모두를 온전히 서빙할 수 있게 된다.
- 리플리케이션 팩터를 이용해서 데이터를 복제해 시스템의 내구도를 높일 수 있다.
파티션 리더(Partition Leader)
- 각 브로커는 복제된 파티션 중 대표하는 파티션 리더를 갖게 된다.
- 모든 읽기와 쓰기는 파티션 리더를 통해 이뤄진다.
- 다른 파티션은 파티션 리더를 복제한다.
카프카 프로듀서(Kafka Producer)
- 메세지(Message)를 토픽(Topic)으로 보내는 클라이언트 애플리케이션이다.
- 메세지를 어느 파티션에 넣을 지 결정한다.
- 파티션에 키를 지정하지 않으면 라운드-로빈 방식으로 각 파티션에 메세지를 분배하고, 파티션 키를 지정하면 같은 키를 가진 메세지가 같은 파티션에 들어간다.
카프카 컨슈머(Kafka Consumer)
- 메세지를 받는 클라이언트 애플리케이션이다.
- 컨슈머를 생성할 때 따로 컨슈머 그룹을 지정하지 않는다면, 유니크한 새로운 컨슈머 그룹이 만들어지게 된다.
- 각 컨슈머 그룹은 모든 파티션으로부터 데이터를 받을 수 있다.
- 컨슈머 그룹 안의 두 컨슈머는 같은 파티션으로부터 동시에 메시지를 받을 수 없다.
- 하지만, 컨슈머는 지정된 파티션으로부터 데이터를 받을 수 있다.
- 컨슈머 그룹이 두 그룹으로 이루어져있을 때 컨슈머 그룹 1은 파티션 1부터 4까지로부터 데이터를 받을 수 있지만, 컨슈머 각각은 지정된 파티션으로부터만 데이터를 받을 수 있다.
리밸런싱(Rebalancing)
- 컨슈머와 파티션의 짝이 맞지 않을 때 파티션이 각각 컨슈머에 지정되고 나머지의 파티션이 중첩되어 지정될 수 있지만, 새로운 컨슈머 생성 시 데이터가 균등하게 분배되도록 리다이렉트하는 과정이다.
카프카 주키퍼(Kafka Zookeeper)
- 카프카 주키퍼는 컨슈머와 통신, 메타데이터 정보 저장, 카프카 상태 관리 등의 역할을 한다.
분산 코디네이션
- 분산 시스템간의 정보 공유, 상태 체크, 서버들 간의 동기화를 한다.
- 분산 시스템의 일부이기 때문에 동작을 멈춘다면 분산 시스템에 영향을 준다.
- 주키퍼 역시 클러스터로 구성되어 있다.
- 클러스터는 홀수로 구성되어 문제가 생겼을 경우 과반수가 가진 데이터를 기준으로 일관성을 유지하는 매커니즘을 갖고 있다.
주키퍼의 역할
- 클러스터 관리: 클러스터에 존재하는 브로커를 관리하고 모니터링한다.
- 토픽 관리: 토픽 리스트를 관리하고 토픽에 할당된 파티션과 레플리케이션(Replication)을 관리한다.
- 파티션 리더 관리: 파티션의 리더가 될 브로커를 선택하고, 리더가 다운될 경우 다음 리더를 선택한다.
- 브로커들끼리 서로를 발견할 수 있도록 정보를 전달한다.
카프카 설치
- 공식 홈페이지에서 설치를 진행한다.
- 카프카 3.1.0 버전의 스칼라 2.13 버전을 다운로드한다.
- 카프카 폴더를 홈 디렉토리로 이동시켜 운영한다.
config
폴더 내를 확인한다.
- 주키퍼를 위한 설정과 로깅 라이브러리 등이 있다.
- 주키퍼 프로퍼티를 살펴본다.
vim ./config/zookeeper.properties
- 프로듀서 프로퍼티를 살펴본다.
vim ./config/zookeeper.properties
- 이런 것이 있구나 정도로만 하고 넘어가면 된다.
bin
폴더를 살펴본다.
- 여러가지 배시(bash)파일이 있는데, 이 배시 파일들이 사용할 카프카의 파일들이다.
- 본격적으로 카프카를 사용해보자.