카프카의 토픽과 파티션, 오프셋

반응형
728x90
반응형

토픽

카프카에서는 프로듀서가 전달하는 메시지를 '토픽'에 저장하고, 컨슈머가 해당 '토픽'에서 메시지를 가져온다고 하였다. 메시지의 저장소 역할을 하는 토픽은 데이터베이스의 '테이블'의 역할과 같다. 또한 회원 테이블에서는 회원의 정보를 가져오고, 주문 테이블에서는 주문 정보를 가져오듯이 토픽도 특정 주제의 데이터들을 저장하는 저장소로 분류할 수 있고, 마찬가지로 컨슈머는 회원 토픽에서는 회원의 정보를, 주문 토픽에서는 주문의 정보를 가져온다. 따라서 토픽은 데이터를 구분하기 위한 단위로도 사용된다.

 

메시지를 받을 수 있도록 논리적으로 묶은 개념으로 데이터를 저장하는 데이터 저장소

 

 

파티션

카프카의 토픽은 분할된다. 이렇게 토픽을 분할한 것을 파티션이라고 한다. 만약 여러 프로듀서가 같은 토픽에 데이터를 전송했을시, 토픽이 분할되지 않아서 파티션이 1개라면 해당 파티션이 전송되는 모든 데이터를 감당해야한다. 이러한 경우에 하나의 메시지 전송 완료 이후 다음 메시지 전송이 가능해지면서, 전송 속도에 영향을 줄 수 있다. 만약 파티션이 여러개로 늘어난다면 각 프로듀서는 이에 맞게 메시지를 전송할 것이고 우리가 알고있는 병렬 처리 방식으로 동시에 여러 메시지들을 보낼 수 있게 되어 전송 속도를 줄일 수 있다.

 

 

 

많은 파티션의 단점 

위 내용을 보면 파티션이 많을 수록 데이터 전송에 좋을 것 같다. 하지만, 카프카의 파티션이 많아질 경우의 단점도 존재한다.

 

  • 1) 파일 핸드러의 낭비

토픽이 분할되어 여러개의 파티션으로 나뉘어질때 각 파티션은 브로커의 디렉토리와 매핑된다. 그리고 저장되는 데이터마다 인덱스/실제 데이터들이 있는 2개의 파일이 존재하는데, 파티션의 수가 많아질수록 이러한 파일 핸들 수가 많아지게 되면서 리소스를 낭비하게된다.

 

  • 2) 장애 복구 시간 증가

카프카는 높은 가용성을 위해 '리플리케이션'을 지원한다. 브로커에 토픽이 있고, 토픽은 분할되어 여러개의 파티션으로 나뉘어진다. 따라서 브로커에는 여러개의 파티션이 존재한다. 각 파티션마다 '리플리케이션'이 동작한다.

 

브로커에 존재하는 여러 파티션들은 '리더' 파티션은 1개로 지정되고, 리더 파티션을 제외한 나머지 파티션들은 '팔로워'로 지정된다. 

 

만약 브로커가 다운되면 해당 브로커에서 지정되어있던 리터 파티션이 일시적으로 사용이 불가능해진다. 카프카는 팔로워 파티션들 중 리더 파티션을 대체할 파티션을 지정하여 클라이언트 요청을 처리할 수 있게한다. 브로커 중에서도 '컨트롤러'로 지정된 브로커가 존재하는데, 해당 브로커가 팔로워 파티션을 리더 파티션으로 지정하는 역할을 수행한다. 컨트롤러로 지정된 브로커는 카프카 클러스터 내에 1개만 존재하고, 컨트롤러 역시 컨트롤러로 지정된 브로커가 다운되면 다른 브로커 들 중의 하나가 다시 컨트롤러로 지정된다.

 

 

 

적절한 파티션 수 정하기

카프카에서 토픽의 파티션 증가는 언제든 변경이 가능하다. 하지만, 파티션의 수를 줄이는 것은 방법이 없다. 만약 파티션의 수를 줄여야한다면 토픽을 삭제해야한다. 적절한 파티션 수를 정할때에는 '목표 처리량의 기준'을 잡아야 한다.

 

  • 1) 프로듀서의 입장

만약에 프로듀서가 4개가 존재한다. 그리고 각 초당 10개의 메시지를 카프카의 토픽으로 보낸다. 카프카의 토픽에서는 초당 40개의 메시지를 받아야하지만 만약 해당 토픽을 분할하여 4개의 파티션이 생긴다면 초당 10개의 메시지를 받을 수 있게된다.

 

  • 2) 컨슈머의 입장

만약에 컨슈머가 8개가 존재한다. 그리고 각 초당 5개의 메시지를 카프카의 토픽에서 가져온다. 토픽의 파티션 수가 만약 컨슈머의 개수와 일치하는 8개라면, 1개의 컨슈머는 1개의 파티션과 1:1 연결이 가능하다.

 

 

 

오프셋

토픽이 분할된 것을 파티션이라고 한다. 이때 각 파티션마다 메시지가 저장되는 위치를 오프셋(offset)이라고 한다. 오프셋은 파티션 내에서 유일하고 순차적으로 증가하는 숫자(64비트 정수) 형태로 되어있다.

 

각각의 파티션에는 프로듀서가 전송한 메시지들이 저장되고, 유일한 숫자인 오프셋을 통해 해당 메시지들의 순서가 보장된다.

 

 

반응형

'Coding > Apache Kafka' 카테고리의 다른 글

카프카의 오프셋과 커밋  (0) 2020.12.20
카프카의 컨슈머 그룹  (0) 2020.12.20
카프카의 리플리케이션 관리  (0) 2020.12.20
카프카의 기능  (0) 2020.12.20
카프카의 기본개념  (0) 2020.12.20

Designed by JB FACTORY