
이번 글에서는 Apache Kafka에 대해 간단히 소개할 예정이다.
본 글의 목차는 다음과 같다.
1. Kafka 등장 배경
2. What is Kafka
3. Kafka Architecture
4. Pub/Sub 모델
1. Kafka 등장 배경

Kafka
에 대해 알아보기 전, 어떻게 Kafka
가 등장했는지 알아보자
초기 Linkedin 운영 시에는 단방향 통신을 통해 연동했으며, 아키텍처가 복잡하지 않아 운영에 어려움이 없었다.
하지만, 시간이 지날수록 source, target application의 개수가 많아져 아키텍처가 거대해짐에 따라 데이터를 전송하는 라인이 위 그림과 같이 많이 복잡해졌다.
또한, 한쪽에 장애가 생기면 다른 한 쪽에도 전달되는 문제가 발생해 유지 및 보수가 어려워지면서 관리에 이슈도 생길 수 밖에 없었다.
이를 통해 Linkedin은 새로운 시스템을 만들기로 결정했고, 이것이 지금의 Apache Kafka
가 되었다.
2. What is Apache Kafka?

Kafka
를 정의해보면 다음과 같다.
대규모 데이터 스트리밍을 처리하는 오픈소스 분산 이벤트 스트리밍 플랫폼
Kafka
는 Linkedin에서 개발되어 Apache Software Foundation에 기여되었으며, 현재는 데이터 파이프라인 및 실시간 데이터 처리의 핵심 기술로 널리 사용되고 있다.
이벤트 스트림을 pub/sub 구조
를 통해 데이터를 지속적으로 가져오고 내보내며, 원하는 기간 동안 지속적으로 안정적이게 이벤트 스트림을 저장한다.
따라서, 대용량 데이터 처리 및 실시간 데이터 스트리밍에 적합하다.
3. Kafka Architecture

Kafka의 기본적인 구조는 위 그림과 같은데, 크게 Producer
, Consumer
, kafka Cluster
, Broker
, Topic
, Partition
등의 구성 요소로 나뉘게 된다.
각각의 역할에 대해 간단히 소개하면 다음과 같다.
Broker
Broker
는 Kafka Cluster를 구성하는 노드를 의미한다. Producer
로 부터 데이터를 받아 Topic
에 저장하고, Consumer
에게 필요한 데이터를 전달하는 브로커 역할을 수행한다.
Kafka Cluster
Kafka Cluster
는 여러 대의 Broker
로 구성된 클러스터이다. 데이터를 저장, 관리, 전송하는 중심 역할을 한다.
Topic
Topic
은 데이터를 카테고리별로 분류하기 위한 단위이다. Producer
는 데이터를 특정 Topic
에 게시하며, Consumer
는 해당 Topic
을 구독하여 데이터를 읽는다.
하나의 Topic
은 여러 Partition
으로 나뉘며 분산 처리 및 확장을 지원한다.
Partition
Partition
은 Topic
을 분할한 단위로 데이터가 물리적으로 저장되는 곳이다. 리더와 팔로워로 나뉘며, 리더 파티션은 데이터를 읽고 쓸 수 있는 주된 역할을 하며, 팔로워 파티션은 리더의 데이터를 복제하여 장애 발생 시 데이터 손실을 방지한다. 각 파티션
은 하나의 Kafka 브로커에 저장되며, 클러스터 내에서 파티션을 분배하여 데이터의 병렬 처리를 가능하게 한다.
Producer
Producer
는 데이터를 생성하여 Kafka
로 전송하는 역할을 수행한다. 데이터를 특정 Topic
에 게시하며, 이때 데이터는 메시지 단위로 전송한다.
Consumer
Consumer
는 특정 Topic
에서 메시지를 소비하여 처리하거나 저장하는 역할을 수행한다. Consumer Group
을 통해 여러 Consumer
들이 협력하여 데이터를 병렬로 처리할 수 있다.
Zookeeper/KRaft(Kafka Raft)
클러스터의 상태를 관리하고, 노드 간의 조정을 수행하는데 사용된다. 기존에는 Zookeeper
가 사용되었으나, 최근 Kafka에서는 Kafka Raft(KRaft)
를 도입되어 Zookeeper
대신 사용된다.
Kafka의 각 구성요소에 대해 간단하게만 소개하였는데, Topic
과 Partition
, Zookeeper
및 KRaft
에 대한 내용은 추후에 별도의 포스팅을 통해 다룰 예정이다.
4. Publish/Subscribe(Pub/Sub) 모델

앞서 언급했듯이, Kafka
는 Pub/Sub 모델
을 따른다.
Pub/Sub 모델
은 메시지 기반의 통신 패턴으로 주로 분산 시스템에서 사용된다. 이 모델은 두 가지 주요 역할이 있는데 Publisher
와 Subscriber
이다.
Publisher
는 메시지를 생성하고 이를 특정Channel(Topic)
에 게시하는 역할을 한다.Publisher
는 메시지를 발행한 후, 메시지가 어떻게 처리될지에 대해 알지 못한다.Subscriber
는 특정Channel(Topic)
을 구독하여 해당Channel(Topic)
에 게시된 메시지를 받아 처리하는 역할을 한다.Subscriber
는 자신이 구독한Channel(Topic)
에 게시된 메시지를 실시간으로 받아서 사용할 수 있다.
이러한 Pub/Sub 모델
은 다음과 같은 특징을 가진다.
비동기적 통신
: Publisher는 메시지를 게시한 후 즉시 다른 작업을 진행할 수 있다. 메시지의 처리 여부나 결과는 Subscriber에게 맡긴다.확장성
: 여러 Subscriber가 동일한 Topic을 구독하고, Publisher는 다수의 Subscriber에게 동시에 메시지를 보낼 수 있어 확장성이 좋다.
Kafka
에서 Producer
는 Publisher 역할을 하고, Consumer
는 Subscriber 역할을 한다.
즉, Producer
는 데이터를 생성하여 Topic
에 게시하고, Consumer
는 해당 Topic
을 구독하여 데이터를 처리한다.
Producer
와 Consumer
는 서로 독립적으로 동작하며, 새로운 Consumer
를 추가하거나 여러 Producer
가 데이터를 동시에 게시하는 등 다양한 확장 가능성을 가진다.
따라서, Kafka
는 이러한 특성을 통해 대규모 분산 시스템에서 효율적으로 메시지를 처리하고 성능을 유지할 수 있다.
마무리
이번 글에서는 Apache Kafka
에 대해 간단히 소개하였다.
확실히, Kafka의 분산 아키텍처
, Pub/Sub 모델
, 높은 처리량
, 확장성 및 내구성
덕분에 다양한 산업 분야에서 실시간 데이터 처리와 이벤트 스트리밍의 핵심 플랫폼으로 자리잡고 있는 것 같다.
이번 글에서는 간단하게만 소개하였기 때문에, 다음 글에서는 Topic
과 Partition
을 비롯해 각각 구성요소에 대해 좀 더 자세히 다뤄볼 예정이다.
'Data Engineering > Kafka' 카테고리의 다른 글
[Kafka] 간단한 Producer/Consumer 실습 (Java) (0) | 2025.01.10 |
---|---|
[Kafka] Apache Kafka 설치 (0) | 2025.01.08 |
[Kafka] Zookeeper와 KRaft(Kafka Raft) (0) | 2025.01.07 |
[Kafka] Kafka 데이터 흐름 이해하기: Partition과 Offset (0) | 2025.01.07 |