DevBoi

[Kafka] 토픽과 파티션 본문

Develop/[Kafka]

[Kafka] 토픽과 파티션

HiSmith 2023. 7. 21. 19:14
반응형

토픽이라는 개념과 파티션이라는 개념이 있다.

토픽은 한개이상의 파티션으로 이루어져있고, 각각의 파티션은 큐 형태로 들어가있다.

위 그림 처럼 프로듀서에서 레코드의 값이 파티션으로 들어가게 되면, 각각의 파티션의 큐에 해당 데이터가 쌓이게 된다.

컨슈머가 데이터를 가져가도, 데이터가 삭제 되지않는다.

 

 

토픽 생성시 파티션이 배치되는 방법은 아래와 같다.

브로커 3개에서 토픽이 생성되는 것을 예시로 들어보자

기본 라운드로빈 방식으로, 순차적으로 리더 파티션이 분배된다.

프로듀서가 각각의 리더파티션과 통신을 할때 한개의 브로커에 몰리는것이 아니라, 브로커를 균등하게 나눠서 통신할 수 있는것이

장점이 된다.

데이터가 많아지더라도, 한개의 브로커와 통신하는 것이 아닌 선형 확장되는 것을 알 수 있다.

리더 파티션이 생성되고, 팔로워 파티션이 그 후에 생성되는 것이다.

 

특정 브로커에 파티션이 쏠리는 현상이 있다.

즉 리더파티션이 몰려서, 애플리케이션이 특정 브로커에 몰리는 것이다.

카프카에는 해당 상황을 방지하기 위해, 

kafka-reassign-partitions.sh 명령으로 재 분배가 가능하다.

 

파티션 개수와 컨슈머 개수의 처리량

컨슈머 개수를 늘림과 동시에 파티션 개수도 늘리면 처리량이 증가하는 효과를 볼 수 있다.

병렬 처리에 대한 지원을 해주기 떄문인데, 해당 처리방식은 처리량을 늘려주는 효과를 준다.

 

초당 개수에 비례해서 보수적으로 컨슈머의 개수와, 파티션의 개수를 늘리는 것이 좋다.

 

 

파티션의 개수를 줄이는 것은 불가능하다.

그렇기 때문에 파티션을 무조건 빨리 많이 늘리는것은 좋지 않다.

카프카의 파티션을 줄이게 되면, 기존 데이터가 들어가있는 경우 파티션의 데이터를 병합하고, 

이는 큰 데이터일수록 과정에서 로드타임이 길고 어려운 작업이라, 지원되지 않는다.

 

반응형

'Develop > [Kafka]' 카테고리의 다른 글

[Kafka] 카프카 토픽 이름 정하기  (0) 2023.07.21
[Kafka] 레코드란?  (0) 2023.07.21
[Kafka] ISR (In-Sync-Replicas)  (0) 2023.07.21
[Kafka] Replica  (0) 2023.07.20
[Kafka] 세그먼트와 삭제 주기  (0) 2023.07.20