메시지를 전달하는 방식은 크게 3가지가 있다:

  • Fire and Forget:
    • 메시지를 보낸 후 성공했는지 실패했는지 신경쓰지 않는 것으로 메시지는 전송되었을 수도 있고, 유실되었을 수도 있다.
    • 이 방식은 메시지가 신뢰성있게 전달되진 않지만 제일 Performance 가 높은 방식이다.
    • 카프카 프로듀서의 경우에는 에러가 발생하더라도 자동으로 계속해서 재시도하기 때문에 대부분의 메시지는 보내질 것이다. 그러나 재시도를 해도 성공하지 못하는 유형의 에러라면 재시도는 자동으로 하지 않게 되고 이 경우에는 메시지 유실이 발생할 수 있다.
    • 비동기식 전송을 하고나서 결과에 대한 콜백을 넣지 않으면 이렇게 동작을 할 것이다.
  • 동기식 전송:
    • 기술적으로는 카프카 메시지는 언제나 Future 객체를 반환하는, 즉 비동기적으로 전송한다. 그러나 Future 객체에선 get() 연산으로 결과가 오기까지 기다릴 수 있으므로 이렇게 한 경우에는 동기식 전송이 될 것이다.
    • 동기식 방식은 네트워크 통신을 기다려야하며, 카프카 브로커에서 메시지가 쓰여질 때까지 기다려야하고, 설정에 따라서 복제가 되기까지 기다려야되니 성능이 잘 나오지 않는다. 그에 반해 얻을 수 있는 장점으로는 카프카 메시지를 써달라는 클라이언트의 요청에 성공/실패에 대한 응답을 내보낼 수 있다는 것이다.
  • 비동기식 전송:
    • Producer 로 데이터를 보냄과 동시에 콜백을 같이 넘기면 결과가 올때까지 기다리지 않고, 결과가 오면 자동으로 콜백이 실행되도록 만들 수 있다.
    • 비동기식 전송은 동기식 전송과 달리 쓰기 요청을 기다리지 않으므로 성능적으로는 이점이 있지만, 클라이언트 결과에 대한 반환은 항상 성공에 대한 응답만 가능할 것이다. 그러므로 응답 반환이 중요한 경우에서는 비동기식 전송을 하면 안된다.

+ Recent posts