본문 바로가기
Devops

[Kafka] kafka에 대해 알아보자 - 2

by heekng 2022. 8. 15.
반응형

kafka에 대해 알아보자

Partitioner(파티셔너)란?

  • producer가 데이터를 보내면 partitioner를 통해서 브로커로 데이터가 전송됩니다.
  • 파티셔너는 데이터를 토픽의 어떤 파티션에 넣을 지 결정하는 역할을 합니다.
    • 레코드에 포함된 메시지 키 또는 메시지 값에 따라서 파티션의 위치를 결정하는 역할을 합니다.
    • 파티셔너는 메시지 키가 있을 때와 없을 때 다르게 동작하게 됩니다.
  • 만약, 파티셔너를 따로 설정하지 않았다면 UniformStickyPartitioner로 설정됩니다.

메시지 키가 있을 때

  • 메시지 키를 가진 레코드는 파티셔너에 의해서 특정한 해쉬값이 생성됩니다.
  • 이 해쉬값을 기준으로 어떤 파티션에 저장될 지 결정됩니다.
  • 토픽에 파티션이 두개가 있는 경우 동일한 키를 가진 레코드는 동일한 해쉬값을 만들기 때문에 항상 동일한 파티션에 들어가는 것을 보장합니다.

메시지 키가 없을 때

  • 메시지 키가 없는 레코드는 라운드 로빈으로 파티션에 들어가게 됩니다.
  • UniformStickyPartitioner 프로듀서에서 배치로 모을 수 있는 최대한의 레도드들을 모아서 파티션으로 데이터를 보내게 됩니다.
  • 따라서 메시지 키가 없는 레코드는 파티션에 적절히 분배해서 들어간다.

커스텀 파티셔너

  • 카프카는 Partitioner 인터페이스를 제공하고 있습니다.
  • Partitioner 인터페이스를 이용해 클래스를 만들면 메시지 키 또는 메시지 값 또는 토픽 이름에 따라서 어느 파티션에 데이터를 보낼 지 정할 수 있습니다.
  • 더 빠르게 처리해야 하는 데이터가 있을 경우 파티셔너를 통해 처리량을 늘릴 수 있습니다.
    • 예를 들어, 10개의 파티션 중 A키를 가진 데이터는 더 빨리 처리해야 할 때 A키에 할당되는 파티션의 수를 8개로, 나머지 데이터는 2개의 파티션에 들어가게 설정한다면, A키를 가진 파티션의 개수가 더 많기 때문에 빠른 처리가 가능합니다.

Consumer Lag(컨슈머 랙)이란?

  • kafka lag은 카프카를 운영함에 있어서 중요한 모니터링 지표 중 하나입니다.
  • 만약 producer가 데이터를 넣어주는 속도가 consumer가 가져가는 속도보다 빠르다면?
    • producer가 넣은 데이터의 offset, consumer가 가져간 데이터의 offset간의 차이가 발생하게 됩니다.
    • 이렇게 producer과 consumer의 offset간의 차이를 consumer lag라 합니다.
  • lag의 상태에 따라 producer와 consumer의 상태에 대해 유추가 가능합니다.
  • 주로 consumer의 상태를 볼 때 사용합니다.
  • 한 개의 토픽과 컨슈머 그룹에 대한 lag가 여러개 존재할 수 있을 때, 그 중 높은 숫자의 lag를 record-lag-max라고 부릅니다.
반응형