Apache Kafka의 탄생과 기본 구조 ✨
왜 Apache Kafka가 나왔을까? 🤔
소셜 네트워크 LinkedIn에서는 파편화된 데이터 수집 및 분배 아키텍처를 운영하는 데 큰 어려움을 겪었다. 데이터를 생성하고 적재하기 위해서는 데이터를 생성하는 소스 애플리케이션과 데이터가 최종 적재되는 타깃 애플리케이션을 연결해야 한다.
초기에는 단방향 통신을 통해 소스 애플리케이션에서 타깃 애플리케이션으로 연동하는 방식이었고, 아키텍처가 단순했기 때문에 운영이 어렵지 않았다. 그런데 시간이 지나면서 문제가 발생하기 시작했다.
- 아키텍처가 점점 거대해짐
- 소스 애플리케이션과 타깃 애플리케이션의 개수가 증가
- 데이터 전송 라인이 기하급수적으로 복잡해짐
- 통신 장애가 여러 곳에서 동시다발적으로 발생
이러한 문제를 해결하기 위해 LinkedIn 데이터팀은 기존의 여러 상용 데이터 프레임워크 및 오픈소스 솔루션을 검토하고 적용해봤지만, 효과적인 해결책을 찾지 못했다. 결국 새로운 데이터 스트리밍 플랫폼을 직접 개발하기로 결정했고, 그렇게 탄생한 것이 바로 Apache Kafka이다.
Apache Kafka의 핵심 개념 🏗️
Kafka는 기존의 개별 애플리케이션 간 데이터 연동 방식 대신 중앙 집중화된 구조를 채택했다. 이를 통해 데이터 파이프라인의 복잡성을 줄이고 안정성을 높이는 것이 가능해졌다.
Kafka의 내부 구조에서 중요한 개념 중 하나는 토픽(Topic)이다. 이는 SQL의 테이블(Table) 개념과 유사하며, 데이터를 구분하기 위해 사용된다. 필요에 따라 새로운 토픽을 생성하여 운영하면 된다.
또한, 토픽은 여러 개의 파티션(Partition)을 가질 수 있다.
데이터를 보내고 받는 주체들 🚀
Kafka에서 데이터는 다음과 같은 주체들에 의해 전송되고 소비된다.
1. 프로듀서(Producer) 🏭
- 데이터를 보내는 역할을 한다.
- 특정 토픽의 파티션 중 하나에 데이터를 적재한다.
- 여러 개의 프로듀서가 동시에 데이터를 보낼 수 있다.
2. 컨슈머(Consumer) 🏢
- 파티션에 저장된 데이터를 가져가는 역할을 한다.
- 데이터를 가져갈 때는 FIFO(First In First Out) 방식으로 순차적으로 가져간다.
- 컨슈머가 데이터를 가져가더라도 파티션의 데이터는 삭제되지 않는다. (이 부분이 Kafka의 핵심적인 특징 중 하나!)
3. 커밋(Commit) 📝
- 컨슈머가 특정 데이터까지 가져갔다는 것을 기록하는 작업이다.
- Kafka는 컨슈머가 어디까지 데이터를 읽었는지를 추적할 수 있도록 해준다.
Kafka의 데이터 저장 방식이 중요한 이유 📌
Kafka의 큰 특징 중 하나는 컨슈머가 데이터를 읽어가더라도 기존 데이터가 삭제되지 않는다는 점이다. 일반적인 메시지 큐 시스템은 데이터를 소비하면 바로 삭제되지만, Kafka는 이를 유지하면서도 다양한 컨슈머 그룹이 독립적으로 데이터를 소비할 수 있도록 한다.
이러한 구조 덕분에 Kafka는 고성능의 실시간 데이터 처리뿐만 아니라 배치 처리에도 활용될 수 있다. Kafka의 내부 동작 방식과 삭제되지 않는 데이터의 활용 방안에 대해서는 추후 더 깊이 살펴볼 예정이다. 😉
'Apache Kafka 공부' 카테고리의 다른 글
#4-1 Zookeeper란? (0) | 2025.02.14 |
---|---|
#4-2 리더 파티션과 팔로워 파티션 (0) | 2025.02.14 |
#4 카프카 브로커와 클러스터 (0) | 2025.02.14 |
#3 카프카 생태계 25.02.10 (1) | 2025.02.14 |
#2 카프카가 데이터 파이프라인으로 적합한 이유 25.02.10 (0) | 2025.02.14 |