Kafka가 제공하는 ‘정말로 한 번만 처리되는 흐름’
카프카를 배우다 보면 꼭 부딪히는 단어가 있다.
Exactly-Once.
이름만 들으면 “한 번만 처리되면 되는 거 아냐?” 하고 쉽게 생각할 수도 있다.
그런데 현실에서 이걸 구현해내는 건 꽤 복잡한 퍼즐에 가깝다.
프로듀서, 브로커, 컨슈머가 서로 다른 단계에서 실패하고 다시 살아나고
메시지를 중복으로 보내거나 놓칠 수도 있기 때문이다.
그래서 카프카는 이 퍼즐을 풀기 위한 여러 장치를 만들어 두었고,
하나씩 따라가 보면 전체 시스템이 어떤 식으로 메시지를 중복 없이, 순서도 유지하면서, 유실도 없이
흐르도록 보장하는지 자연스럽게 감이 잡힌다.
“프로듀서는 메시지를 보내고, 브로커는 저장하고, 컨슈머는 읽으면 되는 거 아닌가?”
이렇게 생각하면 딱 At-Least-Once 수준에서 멈춘다.
문제는 이렇다.