# 순서대로, 한 번만, 빠르게

> Clean Markdown view of GeekNews topic #31433. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31433](https://news.hada.io/topic?id=31433)
- GeekNews Markdown: [https://news.hada.io/topic/31433.md](https://news.hada.io/topic/31433.md)
- Type: news
- Author: [hueypark](https://news.hada.io/@hueypark)
- Published: 2026-07-14T17:46:59+09:00
- Updated: 2026-07-14T17:46:59+09:00
- Original source: [engineering.ab180.co](https://engineering.ab180.co/stories/kafka-event-ordering-at-scale)
- Points: 1
- Comments: 0

## Topic Body

- Airbridge는 광고 클릭·설치·구매 같은 이벤트를 실시간으로 매칭하므로, 이벤트를 빠르게 처리하는 것뿐 아니라 필요한 순서로 처리하고 유실·중복을 막는 일이 중요함.  
- 기존에는 Kafka 메시지를 마이크로 배치로 가져와 이벤트 종류별로 순차 처리함.  
  - 순서는 제어하기 쉬웠지만, 앞선 이벤트 처리를 기다리는 동안 다른 워커가 유휴 상태가 됨.  
  - 워커별 처리 속도 차이와 hot partition이 겹치면, 서버를 증설해도 처리 속도가 정체됨.  
- 이를 해결하기 위해 **Project Differential**을 설계함.  
  - 마이크로 배치를 없애고, 이벤트 종류별 `Consumer`가 같은 Kafka topic을 독립적으로 읽음.  
  - 순서 보장은 topic 전체가 아닌 partition 단위로 수행하며, 순서가 중요한 동일 사용자 흐름의 이벤트가 가능한 한 같은 partition에 들어가도록 구성함.  
  - 뒤따르는 Consumer는 앞선 Consumer의 처리 위치를 추월할 수 없으며, offset 또는 event time 기준의 안전거리를 둠.  
  - 앞선 Consumer가 처리하지 않는 메시지는 다음 Consumer에게 넘겨 재사용하고, 버퍼가 가득 차면 Kafka를 직접 읽는 Polling Mode로 전환함.  
- 내부적으로는 partition별 `ConsumerSuite`/`PartitionedConsumerChain`을 두고, `LimitedEventProcessor`가 앞선 Consumer의 checkpoint를 넘지 않도록 제어함.  
  - `CommitManager`는 버퍼링·비동기 처리 중에도 실제 완료된 연속 offset만 Kafka에 commit하도록 관리함.  
- 테스트 운영에서 이벤트 유실·중복 없이 동작하는 것을 확인했고, 기존 마이크로 배치 방식 대비 **10배 이상 처리 속도가 향상**됨.  
- 완전한 전역 순서를 만드는 대신, 실제 비즈니스에 필요한 순서를 best effort로 지키며 처리량을 확보한 사례임.  
- 향후에는 구조 단순화, Spot Instance 종료 상황에 대응하는 adaptive flow control, 순차 처리 자체를 줄이는 아키텍처 개선을 검토 중임.

## Comments



_No public comments on this page._
