Programming/Kafka

[kafka] 메시지 전송 케이스 별 프로듀서 옵션 설정

bisi 2020. 4. 20. 20:50

 

메시지 전송 케이스 별 프로듀서 옵션 설정

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