- Kafka 62023년 09월 25일
- starryeye
- 작성자
- 2023.09.25.:41
공부한 개념을 한 문장씩 쭉 세워본다.
멱등성 프로듀서..
멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도
카프카 클러스터에 한번만 저장됨을 보장하는 프로듀서이다.
기본 프로듀서는 적어도 한번 전달됨을 보장한다. (At least once)
그래서 카프카 클러스터에 중복 적재될 수 있다는 말이다.
예를 들면, 프로듀서가 send 를 통해 데이터를 브로커로 전달하고,
브로커는 정상 적재를 하였으나..
모종의 이유로 브로커가 프로듀서로, 적재 완료 응답메시지가 정상 전달되지 않아서
프로듀서는 데이터를 재전송하게되는 상황이 있다.
하지만, 이러한 상황은 극히 드문 상황이므로 두려워하지 않아도 된다.
멱등성 프로듀서 동작 방식..
멱등성 프로듀서는 데이터를 브로커로 전달할 때
프로듀서의 고유 ID(PID), 레코드의 전달 고유 넘버인 시퀀스 넘버(SID) 를 같이 전달한다.
해당 값들로 브로커는 데이터의 중복 적재를 판단할 수 있다.
PID, SID 로 중복을 판단하기 때문에 한계점이 있다.
프로듀서가 재시작 되면 PID 가 바뀌므로 멱등성이 보장되지 않는 구간이 생길 수 있다.
멱등성 프로듀서는 SID 를 0부터 시작하여 1씩 증가시킨 값으로 사용한다.
브로커는 데이터를 하나씩 확인하며 SID 가 정상적으로 1씩 증가 되는지를 확인한다.
SID 가 예상한 값이 아닐 경우 브로커는 OutOfOrderSequenceException 예외를 프로듀서에게 응답으로 전달한다.
순서가 중요할 경우.. 이에 대한 처리를 프로듀서에서 해야하는 것을 고려해야한다.
멱등성 프로듀서 설정..
중복 적재를 막기 위해 프로듀서의 enable.idempotence 옵션을 true 로 하면
정확히 한번만 적재할 수 있다. (기본 값은 false 이다.)
이렇게 설정하면 멱등성 프로듀서라 부른다.
카프카 3.0.0 부터는 enable.idempotence 옵션의 기본 값이 true 이다.
(acks = all)
enable.idempotence 옵션을 true 로 설정하면 강제 설정되는 옵션이 있다.
- acks = all
0일 경우엔 적재여부를 확인하지도 않는 것이므로 acks 는 멱등성과 관련이 깊다.
- retries = Integer.MAX_VALUE
해당 옵션이 기본 프로듀서(최소 1회 적재 보장) 에서도 기본 값이다.
1회 이상 적재를 보장 하려면 재시도 횟수는 거의 무한이 정당하다.
acks 옵션이 all, retries 옵션이 거의 무한 으로 된다는 것은..
각각 처리속도가 느려지고, 브로커에 부하가 생길 수 있다는 것이다.
따라서 정말로 멱등성 프로듀서가 필요한가에 대해 고민을 충분히 해야한다.
다음글이전글이전 글이 없습니다.댓글