일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코테준비
- JPA스터디
- 코테공부
- DDD
- 스프링 공부
- nestjs
- K8S
- 스프링부트
- Axon framework
- Flutter
- JPA
- 자바공부
- 카프카
- 스프링부트공부
- 기술공부
- Kafka
- JPA예제
- 스프링
- 알고리즘공부
- nestjs스터디
- 스프링공부
- 자료구조공부
- JPA공부
- JPA 공부
- querydsl
- 플러터 개발
- 기술면접공부
- nestjs공부
- 프로그래머스
- 플러터 공부
- Today
- Total
DevBoi
[Kafka] 파티셔너 본문
프로듀서 에서는 파티셔너를 제일 많이 쓴다.
총 2개의 파티셔너에 대한 지원을 해준다.
UniformStickyPartitioner, RoundRobinPartitioner 2개의 파티셔너를 제공한다.
카프카 클라이언트 라이브러리에서 파티셔너를 지정하지 않는 경우, UniformStickyPartioner가 파티셔너로 기본 설정된다.
1. 메시지 키가 있을 경우 동작
UniformStickyPartioner와 RoundRobinPartitioner 둘다 메시지 키가 있을때는 메시지 키의 해시값과 파티션을 매칭하여 레코드를 전송한다.
동일한 메시지키가 존재하는 레코드는 동일한 파티션 번호에 전달 된다.
만약 파티션 개수가 변경되는 경우,메시지키와 파티션 번호 매칭은 깨지게 된다.
즉 메시지키가 있는 경우, 특정 파티션에서 관리가 되지만 파티션 개수가 증가되면 이 매칭은 깨지게 된다.
이 메시지키를 활용해서 특정 파티션으로 가는 이유는 해싱 방법으로 진행되기 때문이다.
2.메시지 키가 없는 경우 동작
메시지 키가 없는 경우, 파티션에 동일하게 분배하는 로직이 들어있다.
RoundRobinPartitioner는 예전거고, 개선된게 UniformStickyPartioner이다.
라운드 로빈은 들어오는 대로 파티션을 순회하면서 전송한다.
어큐뮤레이터에서 묶이는 정도가 적기 때문에 전송 성능이 낮다.
UniformStickyPartioner 은 다르다
어큐뮤레이터에서 레코드들이 배치로 묶일 때까지 기다렸다가 전송한다.
배치로 묶일 뿐 결국 파티션을 순회하면서 보내기 때문에 모든 파티션에 분배되어 전송된다.
RoundRobinPartitioner에 비해 성능이 좋다. 왜냐면 순회를 계속하는게 아니라, 배치에 쌓이면
그때 되서야, 분배하여 전송하기 때문이다.
프로듀서의 커스텀 파티셔너
카프카 클라이언트 라이브러리에서는 사용자 지정 파티셔너를 생성하기 위한 커스텀 인터페이스를 지원한다.
해당 인터페이스를 상속받아서, 사용자가 직접 정의하면, 해당 파티셔너에 대한 재구성이 가능하며
커스텀하게 로직을 생성 및 적용할 수 있다.
즉 특정 메시지키에 대해서 특정 파티셔너에 넣는 로직을 사용자가 직접 재구성할 수 있다.
'Develop > [Kafka]' 카테고리의 다른 글
[Kafka] 프로듀서 (0) | 2023.08.31 |
---|---|
[Kafka] dead letter queue (0) | 2023.08.23 |
[Kafka] 토픽을 생성하는 방법들 (0) | 2023.08.13 |
[Kafka] 카프카 기타 쉘들 (0) | 2023.08.13 |
[Kafka] consumer-groups (0) | 2023.08.13 |