파티션 규칙(default partitioner)

  • key가 있는경우 :  key를 hash하여 특정 파티션으로 보냄. 키와 파티션간의 mapping은 topic의 파티션 개수가 변경되지 않는경우 유지됨.
  • key가 없는 경우 : 임의로 사용가능한 파티션으로 보낸다. 파티션간의 균형을 맞추는데는 Round Robin 알고리즘을 사용

파티션 개수의 산정방법

파티션 개수를 산정할 때 고려할 점은 다음과 같다

  • 단위시간당 토픽의 처리량(throughput). 예를 들어, 초당 100KB 또는 1GB를 예상 하는가?
  • 한 파티션의 데이터를 읽을 때 목표로 하는 최대 처리량은? 파티션 하나는 항상 한 컨슈머가 소비한다.(컨슈머 그룹을 사용하지 않을 때도 컨슈머는 항상 해당 파티션의 모든 메시지를 읽어야 하기 때문)  따라서 처리 속도가 느린 컨슈머가 피티션을 읽어서 그 데이터를 데이터베이스에 쓸 때 데이터를 쓰는 스레드마다 초당 50MB 까지만 처리할 수 있다면 파티션을 소비하는 최대 처리량이 초당 50MB로 제한 된는것을 염두해야 한다.
  • 하나의 파티션에 데이터를 생성하는 프로듀서당 최대 처리량도 컨슈머와 같은 방법으로 산정할 수 있다. 그러나 대개 프로듀서는 컨슈머보다 훨씬 빠르게 처리되므로 처리량을 조사하지 않아도 무방.
  • key를 사용해서 파티션에 메시지를 쓰는 경우에는 향후에 파티션을 추가할 때 개수 산정이 어려울 수 있다. 따라서 현재보다는 향후에 예상되는 사용 방법을 기준으로 처리량을 추산하자.
  • 브로커마다 파티션 개수와 디스크 용량 및 네트워크 처리속도를 고려하자.
  • 파티션 개수를 너무 많이 고려하지 말자. 각 파티션은 브러커의 메모리와 그 외 다른 자원을 사용하므로 리더선정에 더 많은 시간이 소요되기 때문.

이 모든 것을 고려할 때 파티션 개수를 너무 많이 산정하지 않아야 한다. 토픽의 목표 처리량과 컨슈머의 예상 처리량에 관한 추정치가 있다면, 목표 처리량을 컨슈머 예상 처리량으로 나누는 방법으로 파티션 개수를 산출할 수 있다. 예를 들어 초당 1GB로 토픽을 읽고 쓰기 원하는데 각 컨슈머가 초당 50MB만 처리할 수 있다면 최소한 20개(1000/50)의 파티션이 필요하다는 것을 알 수 있다. 이 경우 20개의 컨슈머가 토픽을 읽으므로 초당 1GB의 목표 처리량을 성취할 수 있다. 그러나 만일 이러한 자세한 정보가 없다면 디스크에 보존하는 파티션 크기를 하루에 6GB미만으로 제한할 것을 권함.

'spark,kafka,hadoop ecosystems > apache.kafka' 카테고리의 다른 글

1 topic vs multi topic  (0) 2018.11.21
zookeeper  (0) 2018.11.20
kafka log 정책  (0) 2018.11.20
kafka manager  (0) 2018.11.20
kafka tuning config  (0) 2018.11.20

+ Recent posts