아파치 카프카
IT 위키
아파치 카프카(Apache Kafka)는 대용량의 실시간 데이터 스트리밍을 처리하기 위해 설계된 분산 메시지 브로커 시스템이다. LinkedIn에서 개발되어 Apache Software Foundation의 오픈소스 프로젝트로 발전하였으며, 실시간 데이터 파이프라인 구축, 로그 수집, 이벤트 스트리밍 등 다양한 분야에서 널리 사용되고 있다.
1 개요[편집 | 원본 편집]
아파치 카프카는 고성능, 확장성, 내결함성을 갖춘 메시징 시스템으로, 대규모 데이터를 실시간으로 게시(publish) 및 구독(subscribe)할 수 있도록 지원한다. 카프카는 분산 환경에서 데이터를 안전하게 저장하고, 빠른 처리 속도로 데이터를 전송하기 위해 설계되었으며, 주로 스트리밍 데이터 처리, 로그 집계, 이벤트 소싱 등에 활용된다.
2 역사 및 배경[편집 | 원본 편집]
아파치 카프카는 LinkedIn에서 내부 로그 처리 시스템으로 시작되었으며, 그 후 2011년 Apache Software Foundation에 기부되어 오픈소스 프로젝트로 발전하였다.
- 초기 개발: LinkedIn에서 대규모 로그 데이터의 실시간 처리 및 전송을 위해 개발됨.
- Apache 프로젝트: 2011년 Apache Kafka로 공개되어, 다양한 산업 분야로 확산되었다.
- 발전: 이후 안정성과 성능 향상을 위해 다양한 기능(예: 스트리밍 처리, 데이터 복제, 내결함성)이 추가되었으며, 오늘날 실시간 데이터 인프라의 핵심 구성 요소로 자리 잡았다.
3 아키텍처 및 주요 구성 요소[편집 | 원본 편집]
아파치 카프카의 아키텍처는 분산형 시스템으로 설계되어 있으며, 다음과 같은 주요 구성 요소로 이루어진다.
- Producer
- 데이터를 카프카 토픽(topic)에 게시하는 클라이언트 애플리케이션이다.
- Consumer
- 카프카 토픽으로부터 데이터를 구독하여 처리하는 클라이언트 애플리케이션이다.
- Broker
- 카프카 클러스터의 서버 노드로, 데이터 저장, 복제, 전송 등의 역할을 수행한다.
- Topic
- 메시지가 분류되어 저장되는 논리적 채널이다. 토픽은 여러 파티션(partition)으로 구성되어 데이터 병렬 처리와 확장성을 지원한다.
- Partition
- 토픽 내에서 데이터가 분산 저장되는 단위이며, 각 파티션은 순서가 보장된 메시지 로그를 구성한다.
- Zookeeper
- 카프카 클러스터의 메타데이터 관리, 브로커 간의 조정, 리더 선출 등의 작업을 위해 사용되었으나, 최신 버전에서는 자체적인 클러스터 관리 기능으로 점차 대체되고 있다.
4 주요 특징[편집 | 원본 편집]
- 고성능 및 확장성
- 수십억 건의 메시지를 초당 처리할 수 있으며, 클러스터를 확장하여 성능을 향상시킬 수 있다.
- 내결함성 및 데이터 복제
- 데이터를 여러 브로커에 복제하여, 하나의 노드 장애 시에도 데이터 손실 없이 시스템을 유지할 수 있다.
- 실시간 스트리밍
- 프로듀서와 컨슈머 간의 빠른 데이터 전송을 지원하여, 실시간 데이터 파이프라인 구축에 적합하다.
- 높은 처리량 및 낮은 지연 시간
- 대규모 분산 환경에서 데이터 처리와 전송을 효율적으로 수행할 수 있다.
- 유연한 데이터 모델
- 메시지의 순서를 보장하면서, 다양한 데이터 포맷과 구조의 데이터를 처리할 수 있다.
5 예시[편집 | 원본 편집]
아파치 카프카를 활용한 간단한 Producer와 Consumer 예제를 아래에 제시한다.
5.1 Python 예제: Producer[편집 | 원본 편집]
from kafka import KafkaProducer
import json
# KafkaProducer 생성: localhost의 Kafka 브로커와 연결
producer = KafkaProducer(
bootstrap_servers='localhost:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
# 메시지 전송: 'test_topic' 토픽에 데이터 전송
data = {'event': 'test', 'value': 123}
producer.send('test_topic', value=data)
producer.flush()
5.2 Python 예제: Consumer[편집 | 원본 편집]
from kafka import KafkaConsumer
import json
# KafkaConsumer 생성: 'test_topic' 토픽에서 메시지 구독
consumer = KafkaConsumer(
'test_topic',
bootstrap_servers='localhost:9092',
auto_offset_reset='earliest',
value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)
# 메시지 읽기
for message in consumer:
print(message.value)
이 예제는 kafka-python 라이브러리를 사용하여 간단한 메시지 전송과 소비 과정을 보여준다. 실제 환경에서는 보다 복잡한 오류 처리와 보안 설정이 필요하다.
6 같이 보기[편집 | 원본 편집]
7 참고 문헌[편집 | 원본 편집]
- Kreps, J., Narkhede, N., & Rao, J. (2011). Kafka: A Distributed Messaging System for Log Processing. In Proceedings of the NetDB.
- Apache Kafka 공식 문서, https://kafka.apache.org/documentation/
- Neha Narkhede, Gwen Shapira, Todd Palino, "Kafka: The Definitive Guide", O'Reilly Media.