분산 시스템(Distributed System)에서 서비스 간 통신 문제 해결을 위해 카프카(Kafka)가 등장함
고성능 메시지 처리(High-Throughput Messaging), 내결함성(Fault Tolerance), 확장성(Scalability)을 제공함
프로듀서(Producer), 토픽(Topic), 컨슈머(Consumer) 등 핵심 개념을 설명함
오버 엔지니어링(Over-engineering)에 대한 커뮤니티의 비판적 시각도 존재함
카프카(Kafka)는 브로커(Broker), 클러스터(Cluster), 주키퍼(ZooKeeper) 또는 KRaft로 구성된 분산 시스템이다. 브로커는 메시지 저장 및 전송을 담당하며, 클러스터는 여러 브로커를 묶어 단일 시스템처럼 동작하게 한다. 주키퍼는 메타데이터 관리 및 클러스터 조정을 담당했지만, 최신 버전에서는 KRaft를 통해 자체적으로 관리한다. 이러한 아키텍처는 고가용성(High Availability)과 수평적 확장성(Horizontal Scalability)을 보장한다.
카프카(Kafka)는 프로듀서(Producer)가 메시지를 토픽(Topic)에 발행하고, 컨슈머(Consumer)가 이를 구독하는 방식으로 작동한다. 컨슈머는 오프셋(Offset)을 통해 메시지 소비 위치를 관리하며, 컨슈머 그룹(Consumer Group)을 통해 병렬 처리를 지원한다. 각 파티션(Partition)은 순차적으로 메시지를 저장하여 메시지 순서를 보장하며, 컨슈머 그룹 내에서 각 파티션은 하나의 컨슈머에 할당된다.
카프카(Kafka)는 데이터 복제(Data Replication)를 통해 데이터 손실을 방지한다. 각 파티션은 리더(Leader)와 팔로워(Follower) 레플리카(Replica)를 가지며, 리더가 모든 읽기 및 쓰기 요청을 처리하고 팔로워는 리더의 데이터를 복제한다. ISR(In-Sync Replica)은 리더와 동기화된 레플리카의 집합으로, 리더 장애 시 ISR 내에서 새로운 리더가 선출된다. 이러한 메커니즘은 내결함성(Fault Tolerance)을 제공한다.
카프카(Kafka)는 최소 1회(At Least Once), 최대 1회(At Most Once), 정확히 1회(Exactly Once)의 세 가지 메시지 전달 보장 수준을 제공한다. 정확히 1회는 아이템포턴트 프로듀서(Idempotent Producers)와 트랜잭션 API를 사용하여 중복 메시지 처리 및 데이터 손실을 방지한다. 이러한 유연성은 시스템의 요구 사항에 따라 적절한 전달 보장 수준을 선택할 수 있게 한다.