Gidhub BE Developer

Kafka 메세지 전송 방법 (Message Send Method) 1편

2019-12-14
goodGid

이 글의 코드 및 정보들은 을 바탕으로 작성하였습니다.

메시지 전송 방법

  • 프로듀서 옵션 중

  • acks 옵션을 어떻게 설정하는지에 따라

  • 카프카로 메시지를 전송 시

  • 메시지 손실 여부 / 메시지 전송 속도 / 처리량 등이 달라지게 된다.


  • 각 옵션은 정확하게 이해하고

  • 사용해야하므로

  • 3가지 경우를 통해

  • 자세히 알아보자.

  1. 메시지 손실 가능성 ↑ && 빠른 전송

  2. 메시지 손실 가능성 ↓ && 적당한 전송 속도

  3. 메시지 손실 X && 전송 속도 ↓



메시지 손실 가능성 ↑ && 빠른 전송

  • 메시지를 전송할 때

  • 프로듀서는 카프카 서버에서 응답을 기다리지 않고

  • 메시지를 보낼 준비가 되는 즉시 다음 요청을 보낸다.


  • 즉 카프카로부터 응답을 기다리지 않고

  • 프로듀서가 준비되면 즉시 보내기 때문에

  • 매우 빠르게 메시지를 보낼 수 있다.


  • 하지만 프로듀서가 카프카로부터

  • 자신이 보낸 메시지에 대해 응답을 기다리지 않기 때문에

  • 메시지 손실이 될 수 있다.

Why?

  • 프로듀서가 카프카로 메시지를 전송했지만

  • 어떠한 이유로 인해 카프카로 도착하지 못했다.


  • 하지만 프로듀서는 카파카의 응답 확인을 하지 않기 때문에

  • 카프카가 메시지를 정상적으로 받았는지에 대해서는 모른다.


  • 그런 상황에서 프로듀서는

  • 또 다른 메시지를 보낼 준비가 되면

  • 계속해서 카프카로 메시지를 전송하게 된다.

Q. 무조건 나쁜건가?

  • 상황에 따라 다르다.

    = Depends on the situation

  • 일부 메시지 손실을 감안하더라도

  • 매우 빠르게 전송이 필요한 경우에는

  • acks = 0으로 설정하면 된다.

So What?

  • 브로커가 다운되는 장애 / 네트워크 다운 등등

  • 크리티컬한 이슈가 아닌 이상

  • acks의 값을 0으로 지정해도 된다.

  • 다만 손실 가능성이 높은 편이라는 점을 인지하고 사용하면 된다.


메시지 손실 가능성 ↓ && 적당한 전송 속도

  • 이 옵션은 프로듀서가 카프카로 메시지를 보낸 후

  • 보낸 메시지에 대해

  • 카프카가 잘 받았는지 확인(acks)을 한다.


  • 응답 대기 시간 없이

  • 계속 메시지만 보내던 1번째 방법과는 달리

  • 확인을 기다리는 시간이 추가되어

  • 메시지를 보내는 속도는 1번 방법에 비해 약간 느리다.


acks = 0 vs acks = 1

  • 요청당 1초가 걸린다고 가정을 해보자.

  • 그리고 그 요청은

  • 보내는 요청응답을 받는 행동으로 정의할 수 있다.

  • acks = 0인 경우엔

  • 보내는 요청만 신경쓰기 때문에

  • 하나의 메시지를 보내는데 1초가 걸린다.

  • 반면 acks = 1인 경우엔

  • 보내는 요청과 응답을 받는 행동이 하나로 묶이기 때문에

  • 하나의 메시지를 보내는데 2초가 걸린다.

  acks : 0 acks : 1
메시지 전송 완료 시간 1초 2초


So What?

  • 메시지 전송 시간은 다소 느리지만

  • 응답을 받기 때문에

  • 메시지 손실률은 매우 낮다.


Q. acks = 1 이면 손실률은 0인가?


Reference


Recommend

Index