[카프카] 4장_카프카 프로듀서
프로듀서란, 메세지를 생산해서 카프카의 토픽으로 보내는 역할을 하는 애플리케이션 or 서버이다.
주요 기능은, 각각의 메세지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다.
프로듀서 옵션 중에 acks 옵션 설정에 따라
카프카로 메세지를 전송할 때, 메세지 손실 여부와 메세지 전송 속도 및 처리량이 달라진다.
메세지 보내고 확인하지 않기
메세지 손실 가능성이 있다.동기 전송
카프카의 응답을 기다린다.비동기 전송
응답을 기다리지 않기 때문에 빠른 전송이 가능하다.
메세지 손실 가능성 높음 && 빠른 전송 속도
acks = 0
카프카 서버의 응답을 기다리지 않고 메세지 보낼 준비가 되면 즉시 다음 요청을 보낸다.
메세지 손실 가능성 낮음 && 적당한 전송 속도
asks = 1
프로듀서는 메세지를 보내고 Leader 는 잘 받았으면, 바로 ack 를 한다.
팔로워들은 주기적으로 리더를 확인하고 새로운 메세지가 확인되면 팔로워들에도 저장한다.
메세지 손실이 발생하는 경우는 리더에 장애가 발생하는 경우이다.
즉, 프로듀서가 리더에게 메세지를 보내고 리더는 메시지를 저장한 후에 바로 장애가 발생하는 경우이다.
메세지 손실 없음 && 느린 전송 속도
acks = all
메세지를 보내고 잘 받았는지 확인하고 추가적으로 팔로워들까지 메세지를 잘 받았는지 확인한다.
이 때, 프로듀서 설정 뿐만 아니라 브로커 설정도 같이 해줘야한다.
프로듀서 acks = all, 브로커 min.insync.replicas = 1
min.insync.replicas 는 최소 리플리케이션 팩터를 지정하는 옵션이다.
- 프로듀서는 토픽의 리더에게 메세지를 보내고,
- 리더는 메세지를 저장한다.
- 최소 하나의 리플리케이션 조건을 갖췄기 때문에 acks 를 보낸다.
프로듀서 acks = all, 브로커 min.insync.replicas = 2
- 프로듀서는 토픽의 리더에게 메세지를 보내고,
- 리더는 메세지를 저장한다.
- 팔로워가 2 개가 있다고 할 때, 첫번째 팔로워는 리더로부터 주기적으로 새로운 메세지를 확인하며 새로운 메세지가 확인되면 자신도 리더의 메세지를 가져와 저장한다.
- 최소 두 개의 리플리케이션 조건을 갖췄기 때문에 acks 를 보낸다.
손실 없는 메세지 전송을 위해서는,
프로듀서 acks = all, 브로커 min.insync.replicas = 2, 리플레케이션 팩터 = 3
프로듀서 acks = all, 브로커 min.insync.replicas = 3
왜 카프카는 손실 없는 메세지 전송을 위해,
min.insync.replicas = 3 이 아니라, min.insync.replicas = 2 를 추천할까 ?
아래 case 를 보자.
- 프로듀서는 토픽의 리더에게 메세지를 보낸다.
- 팔로워가 2 개가 있다고 할 때, 팔로워가 위치한 브로커 하나를 강제 종료한다.
- 에러가 발생한다.
- min.insync.replicas = 3 이기 때문에, 리더, 팔로워, 팔로워 이렇게 3 곳에서 모두 메세지를 받아야만 리더는 프로듀서에게 메세지를 잘 받았다는 acks 를 받을 수 있다.
- 하지만, 팔로워 한 개를 강제 종료하였기 때문에 ISR 에는 리더와 팔로워 각각 하나만 남아 있는 상태다.
- 결국 옵션의 조건을 충족시킬 수 없는 상황이기 때문에 에러가 발생한다.
카프카, 데이터 플랫폼의 최강자 <고승범, 공용준>