아래 영상을 참조하여 작성하였습니다.
메시지 전달에 신뢰성을 주기 위해서는, 아래 요건들을 충족해야한다.
•
정확히 한번 (Exactly-once)
•
적어도 한번 (At least once)
•
최대 한번 (At most once)
아파치 카프카
•
카프카는 이벤트 드리븐 아키텍처와 스트림 데이터 파이프라인에서 중요한 역할을 수행한다.
•
스트림 이벤트를 다루는데 특화되어 있는 카프카는 실시간 데이터를 처리하는데 적합하다.
•
시간 단위 이벤트 데이터를 다루기 위한 타임스탬프, 순서를 보장하기 위한 파티션과 메시지 키와 같은 기능이 카프카에 포함되어 있다.
AT A GLANCE
프로듀서의 메세지 전달 신뢰도
토픽 to 토픽의 메시지 전달
컨수머의 중복 적재 방지
마무리
•
언어(라이브러리)별 지원 여부 확인 필요
•
메시지 전달 신뢰성 테스트는 실제로 수행하기 까다로움 (레플리케이션 속도, 커밋 시점, 파티션 분배 등)
•
단일 카프카 클러스터에서 대응 가능, 서로 다른 카프카 클러스터 연동시에는 다른 관점의 고민 필요
어느 정도 전달 신뢰성을 가질 것이냐. 정말로 필요한가? 장애(네트워크, 브로커 등)로 판단하고 넘어갈 수 있는지?
한마디
현재 사내 시스템에서는 Kafka를 SaaS인 CONFLUENT를 사용하고 있는데 버전을 확인하기가 어렵다고 한다 
회사에서 대용량 데이터를 복잡한 구조 내에서 동기적으로 처리해야하는 개발이 있었는데, 급하게 개발하다보니 멱등성을 보장하지 못한, 로그를 남겨 추적할 수 없는 구조가 되어 개발 비용이 더 들어갔다.
처음부터 설계할 시간이 충분하며 데이터 흐름에 대한 큰 그림을 먼저 그렸더라면, 예상가능한 오류들에 대해 위와 같은 솔루션을 도입하여 더 안정성있는 시스템을 개발할 수 있었지 않았을까 하는 아쉬움이 든다. (사실 처음엔 이벤트 드리븐하게 개발할 예정도 없긴 했다 🥹)