들어가기

Kafka가 제공하는 ‘정말로 한 번만 처리되는 흐름’

카프카를 배우다 보면 꼭 부딪히는 단어가 있다.

Exactly-Once.

이름만 들으면 “한 번만 처리되면 되는 거 아냐?” 하고 쉽게 생각할 수도 있다.

그런데 현실에서 이걸 구현해내는 건 꽤 복잡한 퍼즐에 가깝다.

프로듀서, 브로커, 컨슈머가 서로 다른 단계에서 실패하고 다시 살아나고

메시지를 중복으로 보내거나 놓칠 수도 있기 때문이다.

그래서 카프카는 이 퍼즐을 풀기 위한 여러 장치를 만들어 두었고,

하나씩 따라가 보면 전체 시스템이 어떤 식으로 메시지를 중복 없이, 순서도 유지하면서, 유실도 없이

흐르도록 보장하는지 자연스럽게 감이 잡힌다.


Exactly-Once가 필요한 이유

“프로듀서는 메시지를 보내고, 브로커는 저장하고, 컨슈머는 읽으면 되는 거 아닌가?”

이렇게 생각하면 딱 At-Least-Once 수준에서 멈춘다.

문제는 이렇다.