메시지 전송 케이스 별 프로듀서 옵션 설정
1. 메세지 손실 가능성이 높지만 빠른 전송이 필요한 경우
- 프로듀서의 acks=0 설정
- 일부 메시지 손실을 감안하더라도 매우 빠르게 전송이 필요한 경우.
- 메시지 손실이 발생한다고 해서 프로듀서가 보내는 메시지 90% 이상 손실된다는 의미는 아님
- 일반적인 운영 환경의 경우 메시지 손실 없이 빠르게 보내지만, 브로커가 다운되는 장애 등의 경우에 메시지 손실 가능성이 높은 편.
2. 메시지 손실 가능성이 적고 적당한 속도의 전송이 필요한 경우
- 1번 케이스와는 달리 프로듀서가 카프카로 메시지를 보낸 후 보낸 메시지에 대해 카프카가 잘 받았는지 확인(acks) 함.
- acks 받는 시간이 추가되어 시간이 속도는 떨어짐.(시간: 보내는 행동 + 응답을 받는 행동)
- 리더에 장애가 생기는 경우에 메세지 손실 가능성 있음.
- 최근 프로듀서 애플리케이션으로 많이 사용되는 logstash, filebeat 등에서는 프로듀서의 acks 옵션 기본값을 1로 하고 있음. 기본값 1로 하기를 권장
3. 전송 속도는 느리지만 메시지 손실이 없어야 하는 경우
- 속도 측면에서는 가장 느리지만 데이터를 완벽하게 보장하고 싶을때 사용(acks=all)
- acks=all 을 완벽하게 사용하고자 한다면, 프로듀서의 설정 뿐만 아니라 브로커의 설정도 같이 조정 필요.
- 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =2 최적화.
- min.insync.replicas에 설정만큼의 리더, 팔로워 파티션에 정상 복제 확인 후 다음 acks를 보냄.
아래는 replication factor 3인 토픽의 프로듀서 acks 옵션 값, 브로커의 min.insync.replicas 옵션값을 변경하며 테스트한 케이스 이다.
1) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =1'
- 손실 없는 데이터 처리를 위해 acks=all을 주었지만 min.insync.replicas가 1이므로, 리더 파티션 하나만 확인하고 acks 보냄
- 결국 acks=1과 같은 상황
2) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =2
- acks를 보내기전 최소 2개의 리플리케이션 유지하는지 확인 후 acks 보냄.
- 공식 문서에 손실 없는 메시지 전송을 위한 조건으로 acks = all, min.insync.replicas =2, replicator facor =3 권장
- 1대 정도의 서버 장애가 발생하더라도 손실 없는 메시지 전송을 유지할 수 있음.
3) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =3
- 최소 3개의 파티션에 복제가 되었는지 확인 후 acks 보냄.
- 가장 강력한 방법일 것 같지만, 브로커 하나만 다운되더라도 카프카로 메시지르 보낼 수 없는 클러스터 전체 장애와 비슷한 상황이 발생함.
- 카프카는 브로커가 하나만 다운되더라도 크리티컬한 장애 상황없이 서비스를 잘 처리할 수 있도록 구성되어 있는데, 하나만 다운되더라도 에러 발생.
참고 문헌 : 카프카, 데이터 플랫폼의 최강자 실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지
'Programming > Kafka' 카테고리의 다른 글
[kafka] Consumer 주요 기능 (0) | 2020.04.21 |
---|---|
[kafka] Producer Connection Config (0) | 2020.04.19 |
[kafka] 고가용성 리플리케이션 (0) | 2020.04.15 |