규턴의 개발블로그
article thumbnail

브로커? 클러스터? 주키퍼?

브로커

 

 

broker를 위한 사진

브로커는카프카 클라이언트와 데이터를 주고 받기 위해 사용하는 주체입니다. 1대의 서버에는 하나의 브로커가 올라옵니다.

 

 

클러스터

cluster를 위한 사진

클러스터는 다음사진과 같이 broker의 집합이라고 할 수 있습니다. 즉 cluster는 kafka의 broker를 관리하는 역할을 합니다.그러면 클러스터에는 여러개의 브로커가 존재하는데, 이렇게 많은 브로커를 운영하는 이유는 무엇일까요?바로 데이터를 안전하게 보관하기 위해서입니다.

 

예를들어 사진과 같이 Broker1, Broker2, Broker3은 같은 데이터를 가집니다. 즉 하나가 리더가 되어 나머지 Broker들을 복제합니다.해당 설명은 Kafka의 전체적인 구조를 설명하고 복제에 대해 자세하게 설명하겠습니다.

 

주키퍼

zookeeper

주키퍼는 Kafka 클러스터를 관리합니다.

해당 사진에서는

빨간색: 0번서버

초록색: 1번서버

파란색: 2번서버

라고 가정합니다.

 

0번서버는 주키퍼0,

1번서버는 주키퍼1

2번서버는 주키퍼2

서버의 상태정보를 znode라는곳에 key-value형태로 저장한다.

(참고로 주키퍼0~3을 주키퍼 앙상블이라 하며 클러스터와 비슷한 개념입니다.)

 

그렇기에 카프카가 클러스터 구성을 할 수 있으며, 

앞에서 설명했듯이 Broker1은 Broker0의 복제본이라고 했죠?

즉 이러한 복제과정을 도와줄수 있도록 하는것이 주키퍼의 역할입니다.

 

근데 kafka3.0 이상부터는 주키퍼의 의존성을 제거하고, kafka내에서 설정가능하다네요

 

 

브로커의 역할

 

1. 컨트롤러

하나의 클러스터 내 brokers

카프카 클러스터내에는 여러개의 브로커가 있다고 했습니다.

그중에서 하나가 컨트롤러 역할을 하게 되는데,

컨트롤러 브로커는 다른 브로커의 상태를 지속적으로 확인하고 브로커가 들어오거나 나가는 경우 재조정의 역할을 합니다.

 

2.데이터 삭제

 

카프카는 컨슈머나 프로듀서들도 데이터를 다루지만 데이터를 삭제하지 못합니다.

데이터를 삭제할 수 있는 권한을 가진것은 오직 브로커입니다.

카프카의 파일단위는 '로그세그먼트' 단위로 여러 데이터를 배치 형태로 저장합니다.

그렇기에 우리가 생각하는 db에서 특정값을 삭제하는 방식은 불가능합니다.

 

3. 그룹 코디네이터

 

브로커는 컨슈머 그룹에서의 리밸런싱 과정을 도와줍니다.

컨슈머 그룹에서 하나의 컨슈머가 나가게 되면 브로커 내의 파티션이 컨슈머와 매칭되지 않게 됩니다.

이러한 과정을 빠르게 복구하여 매칭되지 않던 파티션을 다른 컨슈머와 매칭되도록 해줍니다.

 

 

3. 데이터 저장

다음 사진은 hello.kafka의 토픽의 0번 파티션의 저장된 데이터 구성을 볼 수 있습니다.

index: 메시지 오프셋을 인덱싱한 정보

log: 메시지와 메타 데이터

timestamp: 타임스탬프를 인덱싱한 정보

 

그러면 정확히 데이터는 어떤식으로 저장될까요?

다음은 hello.kafka라는 토픽의 데이터 저장을 그림으로 나타낸 것입니다.

데이터 저장 방식

하나의 로그세그먼트에는 여러개의 오프셋으로 구성되어 있습니다.

(즉 데이터가 담긴다고 무방합니다.)

 

그리고 현재 사진은 '000020.log' 세그먼트를 사용하여 데이터를 저장중에 있습니다.

이것을 active segment라고 합니다.

일반적으로 active segment는 브로커에서의 데이터 삭제시 삭제되지 않습니다. (삭제하려면 특수한 설정 필요)

 

 

4. 데이터 복제

 

데이터 복제

 

카프카의 데이터 복제는 파티션 단위로 복제됩니다.

설정중에 replication factor라는것이 있는데 해당 설정을 replication factor=1로 한다면 복제를 따로 안하겠다는 의미입니다.

다음 사진은 replication factor=3과 같습니다.

 

컨슈머는 리더 파티션을 통해서만 데이터를 읽습니다. 팔로워 파티션은 복제용이며 고가용성을 위한것입니다.

팔로워 파티션은 오프셋을 기준으로 리더파티션과 비교하며 리더 파티션과 동일한 데이터를 가지도록 구성됩니다.

 

그렇기에 replication factor=2이상 운영하는것이 중요합니다.

 

 

다음글에서는 kafka 토픽, 파티션, 컨슈머, 프로듀서 등대해서 알아보겠습니다.

 

 

 

 

'data > kafka' 카테고리의 다른 글

[KafKa] KafKa란?  (0) 2022.08.31
profile

규턴의 개발블로그

@규턴이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!