Kafka의 본질은 '로그(Log)'입니다. 하지만 그냥 로그가 아니라, '분산되고(Distributed), 추가만 가능한(Append-only), 복제된(Replicated) 로그'라는 점이 핵심입니다. 이를 '커밋 로그(Commit Log)'라고 부릅니다. 이 세 가지 특성은 선택하는 것이 아니라, 카프카를 구성하는 기본 속성입니다.
Kafka를 '무한히 길어지는 마법의 공유 노트'에 비유할 수 있습니다.
주문 시스템이 재고, 결제, 배송, 알림 시스템에 모두 직접 API를 호출해야 합니다.
문제점: '알림' 시스템에 장애가 발생하면 '주문' 시스템의 처리까지 지연되거나, 알림 데이터가 유실될 수 있습니다. 시스템 간의 의존성이 너무 높습니다.
주문 시스템은 Kafka에 이벤트만 발행하고, 나머지 시스템들은 Kafka에서 이벤트를 구독(Subscribe)합니다.
해결: '주문' 시스템은 Kafka에 '주문 발생' 이벤트를 한 번만 보내면 역할이 끝납니다. 다른 시스템들은 각자 필요할 때 Kafka에서 데이터를 가져갑니다. '알림' 시스템이 잠시 다운되어도 Kafka에 데이터가 남아있으므로, 복구 후 밀린 작업을 처리할 수 있습니다. 데이터 유실이 없고 시스템 간의 의존성이 사라져 안정성이 크게 향상됩니다.