네트워크

Apache Kafka: 분산 스트리밍 플랫폼의 핵심

찬이한이 2025. 1. 8. 08:09


Apache Kafka는 대규모 실시간 데이터 스트리밍과 처리를 지원하는 오픈소스 분산 메시징 시스템입니다. 현대의 데이터 중심 애플리케이션에서 데이터 처리와 전달을 효율적으로 수행하기 위한 필수 도구로 자리 잡았습니다.
이번 글에서는 Kafka의 개념, 특징, 주요 구성 요소, 작동 원리, 사용 사례 및 장단점에 대해 알아보겠습니다.


---

Kafka란 무엇인가?

Kafka는 실시간 데이터 스트리밍을 지원하는 분산 메시징 플랫폼입니다.

LinkedIn에서 개발되었으며, 2011년 Apache Software Foundation에 기부되었습니다.

높은 처리량, 확장성, 내구성을 특징으로 합니다.

로그 데이터를 수집하고 분석하거나 마이크로서비스 간 메시지를 전달하는 데 주로 사용됩니다.



---

Kafka의 주요 특징

1. 분산 아키텍처

데이터를 여러 노드에 분산 저장하여 높은 가용성과 내구성을 보장합니다.



2. 높은 처리량

초당 수백만 개의 메시지를 처리할 수 있습니다.



3. 내구성

데이터를 디스크에 저장하고 복제하여 데이터 손실을 방지합니다.



4. 확장성

브로커, 토픽, 파티션 등을 추가하여 클러스터를 확장할 수 있습니다.



5. 유연한 데이터 처리

실시간 및 비동기 데이터 스트리밍에 적합합니다.



6. 다양한 프로듀서와 컨슈머 지원

다양한 언어(Java, Python, Go 등)를 사용하는 클라이언트를 제공합니다.





---

Kafka의 주요 구성 요소

1. 브로커(Broker)

Kafka 클러스터의 핵심 컴포넌트로, 메시지를 저장하고 전달합니다.

다수의 브로커가 함께 작동하여 고가용성을 제공합니다.


2. 토픽(Topic)

메시지가 카테고리별로 구분되어 저장되는 단위입니다.

각각의 토픽은 여러 파티션으로 나뉩니다.


3. 파티션(Partition)

토픽을 물리적으로 나눈 단위입니다.

메시지는 파티션에 순서대로 기록되며, 각 메시지는 **오프셋(Offset)**으로 식별됩니다.


4. 프로듀서(Producer)

메시지를 생성하고 Kafka에 전송하는 역할을 합니다.

특정 토픽에 데이터를 기록합니다.


5. 컨슈머(Consumer)

Kafka에서 메시지를 읽어오는 역할을 합니다.

특정 토픽의 데이터를 소비하며, 여러 컨슈머는 컨슈머 그룹으로 묶일 수 있습니다.


6. 주키퍼(ZooKeeper)

클러스터 상태를 관리하는 데 사용됩니다.

Kafka 2.8 이후부터는 주키퍼 없이도 클러스터를 관리할 수 있는 **KRaft(Kafka Raft)**로 대체 중입니다.


7. 리더와 팔로워(Leader and Follower)

각 파티션에는 리더와 하나 이상의 팔로워가 있습니다.

리더는 데이터를 읽고 쓰는 역할을 담당하며, 팔로워는 리더의 데이터를 복제합니다.



---

Kafka의 작동 원리

1. 프로듀서가 메시지를 생성하고 특정 토픽에 전송합니다.


2. 메시지는 토픽의 파티션에 저장되며, 파티션은 디스크에 순차적으로 기록됩니다.


3. 컨슈머는 오프셋을 기준으로 메시지를 읽어갑니다.


4. 데이터가 브로커에서 컨슈머로 전달됩니다.



Kafka는 Push-Pull 모델을 사용합니다.

Push: 프로듀서가 브로커로 메시지를 전송.

Pull: 컨슈머가 필요할 때 메시지를 가져감.



---

Kafka의 사용 사례

1. 로그 및 이벤트 수집

서버 로그 데이터를 실시간으로 수집하고 분석.



2. 실시간 데이터 처리

IoT 장치나 센서 데이터 처리에 사용.



3. 마이크로서비스 통신

마이크로서비스 간 메시지를 전달하며, 비동기 통신을 지원.



4. 스트리밍 데이터 분석

Apache Spark, Flink와 통합해 실시간 데이터 분석 수행.



5. 데이터 통합 플랫폼

다양한 시스템에서 데이터를 수집하고 중앙에서 관리.





---

Kafka의 장점

1. 높은 처리 성능

초당 수백만 개의 메시지를 처리 가능.



2. 확장성

브로커와 파티션을 추가하여 성능 향상 가능.



3. 내구성 및 신뢰성

데이터 복제와 디스크 저장으로 데이터 손실 방지.



4. 유연성

다양한 애플리케이션과 언어 지원.



5. 커뮤니티 및 생태계 지원

활발한 커뮤니티와 다양한 오픈소스 도구 제공.





---

Kafka의 단점

1. 운영 복잡성

클러스터 설정 및 관리가 복잡하며, 운영 경험이 필요합니다.



2. 지연 시간

실시간 성능은 뛰어나지만, 초저지연을 요구하는 시스템에는 부적합할 수 있습니다.



3. 장기 데이터 보관 어려움

디스크 공간 제한으로 인해 장기적인 데이터 보관은 별도의 솔루션이 필요합니다.



4. 학습 곡선

Kafka의 개념과 설정을 이해하려면 시간이 필요합니다.





---

Kafka와 RabbitMQ 비교



---

Kafka의 미래

Kafka는 지속적으로 발전하며 새로운 기능과 성능 개선을 추가하고 있습니다.

KRaft(Kafka Raft): 주키퍼를 대체하는 네이티브 클러스터 관리.

스트리밍 통합 강화: 실시간 데이터 처리에서의 역할 확대.

클라우드 네이티브: 클라우드 환경에서의 최적화를 지원.



---

결론

Kafka는 대규모 데이터 스트리밍과 실시간 처리가 필요한 환경에서 필수적인 도구입니다.

분산 아키텍처를 기반으로 높은 성능, 확장성, 신뢰성을 제공합니다.

학습 곡선이 있지만, 그 가치는 운영 효율성에서 드러납니다.