About Kafka
- Kafka는 분산 환경에서 대규모 데이터 스트리밍·메시징·실시간 처리를 위해 특화된 스트리밍 플랫폼
- 여러 서버(Broker)와 클라이언트(Producer/Consumer)가 고성능 TCP 프로토콜로 통신하며 데이터를 토픽 단위로 발행하고 구독할 수 있다
- 메시징, 로그 집계, 스트림 처리, 이벤트 소싱 등 다양한 도메인에서 활용된다.
Kafka 도입 배경
- 팝핀 서비스에서 사용자에게 보내지는 알림의 종류는 약 10가지이다.
- Token 기반의 공지 사항 알림
- Topic 기반의 9가지 종류 알림
- 알림에 실시간 성을 반드시 부여할 필요는 없지만 현재 아키텍처에는 문제가 너무 많다.
- 현재는
직렬 처리 + FCM 네트워크에 과도하게 의존하는 구조 + 재처리 로직 X 으로 설계됨
- 서비스가 확장되어 사용자가 수천~ 이상으로 는다면
발송 지연, Bottleneck 장애 위험
- 서비스 확장성을 고려, 사용자에게 안정적으로 알림을 보낼 수 있는 시스템으로 구조 개선 필요
왜 Kafka인가?
- 디스크 기반의 로그 방식과 Partitioning 덕분에 초당 수만~수십만 TPS 처리
- Consumer만 더 추가하여 알림 기능 확장 용이(
fcm.topic.* 구조 등으로 확장 가능)
append-only log 방식으로 데이터가 불변하기에 리플레이·재 처리, DLQ 같은 기능 구현에도 유리함
- Connect, Stream, 모니터링 툴, DB/로그 시스템과의 연동 커넥터 생태계 활성
Springboot의 @Async나 JVM Multi-Threading으로 비동기 처리를 구현할 수는 없나?