반응형
kafka에 대해 알아보자
Partitioner(파티셔너)란?
producer
가 데이터를 보내면partitioner
를 통해서 브로커로 데이터가 전송됩니다.- 파티셔너는 데이터를 토픽의 어떤 파티션에 넣을 지 결정하는 역할을 합니다.
- 레코드에 포함된 메시지 키 또는 메시지 값에 따라서 파티션의 위치를 결정하는 역할을 합니다.
- 파티셔너는 메시지 키가 있을 때와 없을 때 다르게 동작하게 됩니다.
- 만약, 파티셔너를 따로 설정하지 않았다면
UniformStickyPartitioner
로 설정됩니다.
메시지 키가 있을 때
- 메시지 키를 가진 레코드는 파티셔너에 의해서 특정한 해쉬값이 생성됩니다.
- 이 해쉬값을 기준으로 어떤 파티션에 저장될 지 결정됩니다.
- 토픽에 파티션이 두개가 있는 경우 동일한 키를 가진 레코드는 동일한 해쉬값을 만들기 때문에 항상 동일한 파티션에 들어가는 것을 보장합니다.
메시지 키가 없을 때
- 메시지 키가 없는 레코드는 라운드 로빈으로 파티션에 들어가게 됩니다.
- UniformStickyPartitioner 프로듀서에서 배치로 모을 수 있는 최대한의 레도드들을 모아서 파티션으로 데이터를 보내게 됩니다.
- 따라서 메시지 키가 없는 레코드는 파티션에 적절히 분배해서 들어간다.
커스텀 파티셔너
- 카프카는 Partitioner 인터페이스를 제공하고 있습니다.
- Partitioner 인터페이스를 이용해 클래스를 만들면 메시지 키 또는 메시지 값 또는 토픽 이름에 따라서 어느 파티션에 데이터를 보낼 지 정할 수 있습니다.
- 더 빠르게 처리해야 하는 데이터가 있을 경우 파티셔너를 통해 처리량을 늘릴 수 있습니다.
- 예를 들어, 10개의 파티션 중
A
키를 가진 데이터는 더 빨리 처리해야 할 때 A키에 할당되는 파티션의 수를 8개로, 나머지 데이터는 2개의 파티션에 들어가게 설정한다면, A키를 가진 파티션의 개수가 더 많기 때문에 빠른 처리가 가능합니다.
- 예를 들어, 10개의 파티션 중
Consumer Lag(컨슈머 랙)이란?
kafka lag
은 카프카를 운영함에 있어서 중요한 모니터링 지표 중 하나입니다.- 만약 producer가 데이터를 넣어주는 속도가 consumer가 가져가는 속도보다 빠르다면?
- producer가 넣은 데이터의 offset, consumer가 가져간 데이터의 offset간의 차이가 발생하게 됩니다.
- 이렇게 producer과 consumer의 offset간의 차이를
consumer lag
라 합니다.
- lag의 상태에 따라 producer와 consumer의 상태에 대해 유추가 가능합니다.
- 주로 consumer의 상태를 볼 때 사용합니다.
- 한 개의 토픽과 컨슈머 그룹에 대한 lag가 여러개 존재할 수 있을 때, 그 중 높은 숫자의 lag를
record-lag-max
라고 부릅니다.
반응형
'Devops' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 간단 개념 정리 (0) | 2022.08.29 |
---|---|
[Kafka] docker를 이용해 kafka 환경 구축하기 (0) | 2022.08.16 |
[Kafka] kafka의 console 명령어 (0) | 2022.08.16 |
[Kafka] kafka에 대하여 알아보자 - 1 (0) | 2022.08.15 |
[HTTP] HTTP 헤더 (1) (0) | 2022.05.09 |
[HTTP] http status 상태코드의 종류 (0) | 2022.05.08 |