Apache Kafka 공부

#8 토픽과 파티션

박태정 입니다. 2025. 2. 15. 01:03
반응형

토픽과 파티션📚

카프카를 처음 접하면서 토픽과 파티션의 개념이 조금 헷갈렸다. 그래서 이번에 공부하면서 정리해보았다.

1. 토픽과 파티션의 관계 🤔

카프카에서 토픽은 여러 개의 파티션으로 이루어져 있다고 한다. 그런데 토픽을 생성할 때, 파티션을 몇 개 만들지에 대해 고민을 많이 하게 되는데, 사실 파티션이 여러 개로 나뉘어야만 처리 성능이 좋아진다는 점에서 중요하다.

각각의 파티션은 Queue처럼 동작하지만, 큰 차이점은 데이터를 소비해도 삭제되지 않는다는 것이다. 즉, 데이터를 계속 보관할 수 있다는 장점이 있다.

그리고, 프로듀서는 데이터를 메시지 키메시지 값으로 구성된 레코드 형식으로 보낸다. 이때 offset이 신규로 붙여지는데, 이 offset 덕분에 데이터를 순차적으로 쌓을 수 있다. 계속해서 데이터를 추가하면서도 데이터가 순서대로 처리될 수 있도록 만들어주는 핵심적인 역할을 한다고 생각된다.

그렇다면, 파티션과 토픽이 어떻게 연결되는지 조금 더 구체적으로 이해할 필요가 있었다.

2. 토픽 생성 시 파티션 배치 방법 ⚙️

파티션 개수가 5개인 토픽을 생성한다고 가정해보자. 만약에 브로커가 3개(0번, 1번, 2번) 있다고 하면, 리더 파티션이 어떻게 배치될까?

리더 파티션은 round-robin 방식으로 배치된다. 즉, 5개의 파티션이 3개의 브로커에 순차적으로 배치된다는 것인데, 이렇게 되면 한 브로커에 트래픽이 집중되는 문제를 방지할 수 있다. 여러 개의 브로커로 분산처리되니까, 네트워크 성능도 향상되고, 데이터가 많아져도 자연스럽게 확장이 가능하다.

그런데 팔로워 파티션은 어떻게 배치될까? 팔로워 파티션은 리더 파티션이 배치되지 않은 브로커에 순차적으로 배치된다. 예를 들어, 브로커 0에 리더 파티션이 있으면, 그 다음 브로커인 1번에 팔로워 파티션을 배치하고, 그 다음은 2번 브로커로 배치된다. 만약에 브로커 3이 없으면 다시 0번 브로커로 돌아가서 순차적으로 배치된다.

3. 특정 브로커에 파티션이 쏠리는 현상 ⚠️

여기서 문제가 발생할 수 있다. 리더 파티션이 특정 브로커에 모두 몰리는 현상이다. 이럴 경우, 그 브로커에 과도한 컴퓨팅 자원이 소모되기 때문에 성능이 떨어질 수 있다. 그래서 파티션이 고르게 분배되도록 조정하는 것이 중요하다. 카프카 클러스터를 운영할 때 이 부분을 잘 관리해야 한다는 점이 키 포인트인 것 같다.

4. 파티션 개수와 컨슈머 개수의 관계 📈

컨슈머파티션의 관계는 사실 매우 중요한 부분이다. 기본적으로 컨슈머 1명파티션 1개가 할당된다고 한다. 그런데 컨슈머는 여러 개의 파티션을 처리할 수 있다는 점에서 병렬 처리가 가능하다.

처리량을 늘리고자 하면, 파티션 개수컨슈머 개수를 늘리면 된다. 예를 들어, 프로듀서가 데이터를 초당 10개씩 보내고, 각 파티션이 초당 1개씩 데이터를 처리한다고 할 때, 처리량에 문제가 생길 수 있다. 이런 지연을 컨슈머 렉이라고 하는데, 이를 해결하려면 파티션과 컨슈머를 각각 10개씩 늘리면 된다.

그런데 중요한 점은 파티션을 늘릴 수는 있지만, 줄이는 것은 불가능하다는 것이다. 그래서 파티션을 늘리기 전에 신중하게 고민해야 한다는 점을 기억해야겠다.

5. 결론 📝

카프카에서 파티션과 토픽, 그리고 컨슈머의 관계를 이해하는 데 시간이 좀 걸렸다. 파티션을 잘 설계하는 것이 시스템 성능에 얼마나 중요한지 알게 되었다. 또한, 파티션이 한 브로커에 쏠리지 않도록 분배하는 것도 중요한 포인트라는 걸 깨달았다.

반응형

'Apache Kafka 공부' 카테고리의 다른 글

#10 토픽 작명 방법  (0) 2025.02.16
#9 레코드  (0) 2025.02.16
#7-1 브로커 복제 - ISR  (0) 2025.02.15
#7 브로커의 역할 - 복제  (0) 2025.02.15
#6 세그먼트와 삭제 주기  (0) 2025.02.15