분산 시스템 환경에서는 특히 EDA(Event-Driven Architecture)를 갖는 시스템 환경이라면
Message Broker를 사이에 두고 각 서비스가 메세지를 주고 받을 것이다.
이러한 아키텍처는 결합도를 낮추는 측면에서 엔지니어링에 장점을 갖지만 그와 동시에 여러가지 풀기 힘든 숙제들이 생기게된다.
분산 시스템에서는 오직 2가지 문제 밖에 없다.
2. 정확히 한 번 전달
1. 보장된 메세지 순서
2. 정확히 한 번 전달
이 글에서 말하고 싶은 내용은 Exactly-once delivery, 즉 정확히 한 번 전달이다.
분산 시스템 환경에서는 정확히 한 번 전달은 불가능하다라는 주장의 글이 있다.
https://bravenewgeek.com/you-cannot-have-exactly-once-delivery/
비록 2015년도에 작성된 글이긴 하지만 메세지 전달 방식의 가능성에 대한 주장은 위 글에서 처음 보았고 그 논조 또한 굉장히 강하기 때문에 굉장히 흥미로웠다.
아래는 글의 일부를 발췌하였다.
Every major message queue in existence which provides any guarantees will market itself as at-least-once delivery.
현존하는 모든 메이저 메세지 큐는 at-least-once(적어도 한 번) 전달 보장을 제공한다고 스스로를 마케팅한다.
If it claims exactly-once, it’s because they are lying to your face in hopes that you will buy it or they themselves do not understand distributed systems.
만약 정확히 한 번을 얘기한다면, 당신이 그들의 제품을 살거라는 희망을 가지고 당신 면전에 거짓말을 하는 것이거나
그들 스스로 분산 시스템을 이해하지 못하기 때문이다.
Either way, it’s not a good indicator.
어느 쪽이든 간에, 좋은 지표는 아니다.
하지만 2017년도에 Kafka를 개발하고 있는 Confluent 사의 블로그에 Exactly-Once Semantics Are Possible: Here’s How Kafka Does It 라는 제목과 해당 기능의 릴리즈를 알리는 글이 올라왔다.
또한 글에서 성능적인 타협을 하지 않았음을 얘기하기도 한다.
과연 불가능하다는 측의 주장에서 처럼 허황된 거짓말일까?
그러기엔 Kafka는 이제 엔터프라이즈 개발 환경에서 de-facto가 되었고 수 많은 유저들이 거짓말을 알아차리지 못하진 않을 것이다.
또한 관련하여 지속적인 노력을 확인 할 수 있다.
https://www.confluent.io/blog/simplified-robust-exactly-one-semantics-in-kafka-2-5/
정확히 한 번 전달을 가능하게 하는 카프카의 알고리즘을 깊게 확인해보진 않았지만,
성능적인 면에서 크게 불이익이 없다면 exactly-once delivery를 굳이 마다할 일은 없지 않을까 싶다.
물론 exactly-once delivery가 exact 하다면 말이다 :)
'Data Engineering > Kafka' 카테고리의 다른 글
Kafka Partition key를 사용하여 데이터 순서대로 처리하기 (0) | 2023.01.12 |
---|---|
Docker Compose를 사용하여 Kafka 셋업하기 (0) | 2022.01.28 |
댓글