[ 카프카 브로커 ]
카프카에서 브로커는 카프카를 저장하는 공간이고 가장 핵심이 되는 애플리케이션입니다.
카프카 브로커를 실행하기 위해서 반드시 주키퍼가 필요합니다.
주키퍼는 카프카에서 사용되는 다양한 메타데이터를 저장하고 사용되는데 토픽의 파티션 위치, 컨슈머 그룹 이름과 같은 메타데이터가 저장되고 사용됩니다. 이러한 메타데이터는 카프카 브로커 운영을 위해 내부에서 사용될 뿐 아니라 프로듀서와 컨슈머가 토픽을 클러스터와 통신을 하는데 중요한 역할을 합니다.
** 카프카 브로커의 역할
. 데이터 복제, 삭제, 컨트롤러, 코디네이터 등
** 주키퍼의 역할
. 카프카를 운영하는데 필요한 메타데이터 저장
. 토픽의 파티션 위치, 컨슈머 그룹 이름 등
프로듀서가 보낸 데이터는 브로커에 저장되는데, 이 브로커라고 불리는 애플리케이션(or 프로세스)는 서버 1대에 1개의 브로커로 실행됩니다. 만약 여러 브로커로 분산 운영하고 싶다면 서버를 여러 대 발급받아서 각 서버당 브로커 프로세스를 실행시켜서 클러스터로 운영하는 구조입니다.
(1개의 서버에 여러 브로커를 띄울 수 있지만, 서버의 장애의 대비해서 클러스터로 서버를 이중화/삼중화하는 것입니다.)
프로듀서가 보낸 데이터는 브로커 애플리케이션이 있는 서버의 파일 시스템에 저장합니다. 파일 시스템에 저장함으로써 데이터를 안전하게 저장하고, 브로커가 중단되더라도 다시 브로커를 실행시켜서 데이터를 사용할 수 있는 구조라고 볼 수 있습니다.
[브로커:데이터 복제]
카프카에서는 데이터를 안정적으로 분산 저장하기 위해, 브로커를 여러 대 운영합니다.
데이터를 분산 저장하기위해 카프카에서는 파티션을 복제해서 여러 서버에 분산 저장합니다.
이렇게 복제한 파티션은 리더 파티션과 팔로워 파티션으로 구성되어 있습니다.
** 파티션은 리더 파티션과 팔로워 파티션으로 구성되어 있습니다.
. 리더: 프로듀서, 컨슈머와 직접 통신하는 브로커에 위치
브로커로 전송된 데이터는 가장 처음 리더 파티션에 저장된다
. 팔로워: 리더가 있는 브로커와 다른 브로커에 저장됨
(팔로워 파티션을 구성하기 위해서는 브로커가 2개 이상인 클러스터를 운영해야 합니다)
리더 파티션을 계속 복제하여 데이터를 분산 저장하는 용도
[브로커:그룹 코디네이터]
여러 브로커 중 한대는 코디네이터 역할을 하게 됩니다.
** 컨슈머 그룹 상태를 체크
. 컨슈머에 장애가 발생하여 더이상 파티션이 소비되지 않을 경우 정상 컨슈머에 파티션 할당을 변경함(리밸런스)
** 파티션 변경 상태를 체크
. 파티션이 변경되면 리밸런스
이런 상태에 따라 컨슈머와 파티션의 할당을 변경해주는 리밸런싱을 발생시키는 역할을 합니다.
코디네이터 역할을 하는 브로커는 토픽과 연계된 파티션과 컨슈머의 상태에 따라 컨슈머와 파티션의 할당을 변경해주는 리밸런싱을 일으켜 데이터가 지속적으로 처리되도록 도와줍니다.
[브로커:컨트롤러]
클러스터를 구성하는 브로커 중 한대는 컨트롤러 역할을 합니다.
클러스터에서 시작하는 첫 번째 브로커가 컨트롤러가 되고, 나머지 브로커들에게 파티션들에 대한 정보를 나눠가질 수 있도록 전송해서 프로듀서나 컨슈머가 정상적으로 브로커와 통신할 수 있도록 도와줍니다.
또한 컨트롤러 브로커는 리더 파티션을 선출합니다. 이는 데이터가 분산 저장되어 있을 때, 안전하게 데이터를 지속적으로 처리할 수 있도록 하는 데 핵심적인 역할을 합니다.
[주키퍼가 가지고 있는 메타데이터들]
** 컨트롤러 정보: /controller
** 브로커 ID와 토픽 정보들: /brokers/ids, /brokers/topics
** 토픽 설정 정보: /config
. 이런 데이터는 직접 주키퍼 명령어들을 통해서 노드를 조회하고 확인할 수 있습니다.
** 필요할 경우 하나의 주키퍼로 다른 용도의 카프카 클러스터(브로커)를 운영할 수 있습니다.
. /data/...
. /marketing/...
. 와 같이 root node의 이름을 다르게 만들고 지정해서 여러 클러스터를 한꺼번에 운영할 수 있음
주키퍼와의 통신으 브로커, 클러스터를 운영하는 데 데이터 통신이 지속적으로 일어나 운영상의 허들이 되어왔습니다.
그래서 카크파 클러스터를 운영할 때 주키퍼 없이 운영할 수 있도록 개발중에 있습니다(3.0에서는 주키퍼 삭제 예정)
'~2022 > Apache Kafka' 카테고리의 다른 글
[Apache Kafka] 7. 프로듀서 (0) | 2021.11.11 |
---|---|
[Apache Kafka] 6. 카프카 클러스터 (0) | 2021.11.11 |
[Apache Kafka] 4. 의미 있는 토픽 이름 작명 방법 (0) | 2021.11.11 |
[Apache Kafka] 3. 레코드, 파티션, 토픽 (0) | 2021.11.11 |
[Apache Kafka] 2. 카프카의 특징, 장점(데이터 파이프라인에 적합한 이유) (0) | 2021.10.28 |