Programming/Kafka

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

bisi 2020. 4. 20. 20:50
1. 메세지 손실 가능성이 높지만 빠른 전송이 필요한 경우 
2. 메시지 손실 가능성이 적고 적당한 속도의 전송이 필요한 경우
3. 전송 속도는 느리지만 메시지 손실이 없어야 하는 경우
1) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =1'
2) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =2
3) 프로듀서 옵션 acks = all 과 브로커의 min.insync.replicas =3

 

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

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