008 Topic Partition

강의 메모 #

토픽과 파티션 #

토픽과 파티션 #

img.png

토픽은 반드시 1개 이상의 파티션을 가져야한다. 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데, 이 데이터를 ‘레코드’라고 한다. 파티션에 있는 구조는 큐와 비슷 일반적인 큐는 데이터를 pop() 하면 삭제되는데, 카프카는 컨슈머가 데이터를 가져가더라도 데이터가 삭제되지않고 유지된다. 여러개의 컨슈머 그룹들이 토픽의 데이터를 여러번 가져갈 수 있다.

토픽 생성시 파티션이 배치되는 방법 #

img_1.png

  • 파티션이 5개일 경우 그림과 같이 배치될 수 있다
  • 0번 브로커부터 시작하여 round-robin 방식으로 리더 파티션들이 생성된다.
  • 리더 파티션이 순차적으로 만들어진다.
  • 프로듀서가 각각의 리더 파티션이 있는 브로커와 통신하여 데이터를 주고받으므로 여러 브로커에 골고루 네트워크 통신을 하게된다.
  • 한곳으로 리더 파티션이 쏠리게되면 모든 카프카 프로듀서의 요청을 받아내야하기 때문에 분산시켜야한다.
    • 이런 경우 kafka-reassign-partition.sh 명령으로 파티션을 재분배할 수 있다.

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

img_2.png

파티션은 그룹으로 묶인 컨슈머들이 레코드를 병렬로 처리할 수 있도록 매칭된다. 기본적으로 컨슈머 : 파티션의 관계는 1:1 관계이다. 파티션은 최대 1개의 컨슈머만 가질 수 있다. 즉, 파티션 1개일때 컨슈머가 2개여도 2개를 모두 맺을 수는 없다. 그래서 파티션을 늘리게되면 컨슈머도 늘려야한다. 만약 컨슈머 1개가 오류날 경우 파티션 여러개가 파티션 1개에 붙을 수는 있다. 컨슈머 개수를 늘림과 동시에 파티션 개수도 늘리면 처리량이 증가하는 효과를 볼 수 있다.

파티션 개수를 줄이는 것은 불가능 #

img_3.png

카프카에서 파티션 개수를 줄이는 것은 지원하지 않는다. 토픽의 파티션 3개로 운영 중에 파티션 2개로 줄이는것이 불가능하다. 변경하려면 토픽을 삭제하고 재생성해야한다.