- 네트워크를 통해 통신하기 때문에 메시지 전달 신뢰성을 항상 고려해야 한다.
- 정확히 한번: 모든 데이터 처리가 단 한번만 된다. (발행된 이벤트를 단 한번만 처리한다.)
- 적어도 한번: 데이터가 중복 발행, 수행 또는 적재될수 있다. (은행에서 이체가 2번되나 이러면 안된다.(문제있음))
- 최대한번: 데이터가 유실되는것을 뜻한다. 하지만 이건 데이터가 중복되지는 않는다.
- 잘 전송이 되었는지 확인하는 과정을 Acknowledgement랑 Offset commit으로 확인한다.
- 네트워크로 통신하기때문에 안정성을 위해 확인을 해야만 한다.
- 첫번째 방법으로는 멱등성 프로듀서가 있다.
- 네트워크에 의해 실제로는 메시지가 적재되었지만 네트워크 장애로 인해 Ack가 유실되어 오류가 발생할수도 있다.
- 이때는 retry로 다시 record를 전송하게 되는데 이러면 중복으로 이벤트 데이터가 적재될수도 있다.(가능성 존재)
- 이것을 적용시키기 위해서는 async producer라는 callback방식으로 producer의 record가 잘 적재되었는지 확인하는 방식으로 만들어야지만 최종적으로 원하는 성능을 가질수가 있다.
- 두번째 방법으로는 Topic to Topic의 메시지 전달 방식이다.
- event-driven 아키텍쳐는 이벤트를 로그로 처리한다. 로그란 것은 변경이 되지않고 계속 append(추가)되는 것을 뜻한다.
- Atomic 하게 한번에 처리되어야 하는 상황이다.