Apache Kafka란?
1. Kafka를 이해하기 위한 시작점
오늘날처럼 데이터가 폭발적으로 생성되는 시대에는, 실시간으로 데이터를 수집하고 처리할 수 있는 시스템이 필수입니다. 바로 이 역할을 수행하는 것이 Apache Kafka입니다.
Kafka는 분산형 스트리밍 플랫폼입니다. 간단히 말하면, 다양한 시스템이나 서비스들이 데이터를 주고받을 때 그 중간에서 데이터를 안전하게 전달하고 저장해주는 중개자 역할을 합니다. 특히 초당 수백만 건의 메시지를 처리할 수 있을 정도로 높은 처리량을 자랑합니다.
Kafka는 LinkedIn에서 내부 로그 처리 시스템으로 시작했으며, 이후 오픈소스로 공개되었고, 현재는 전 세계 수많은 기업에서 사용되고 있습니다.
2. Kafka는 왜 필요한가?
Kafka가 없던 시절을 생각해봅시다. 예를 들어, A라는 서비스에서 생성된 데이터를 B, C, D 시스템이 각각 받아야 한다고 가정해보죠. A가 B, C, D 각각에 데이터를 직접 전달하려면 다음과 같은 문제가 발생합니다.
- 연결이 복잡해짐: A는 세 시스템에 모두 연결해야 하며, 시스템이 늘어날수록 더 복잡해집니다.
- 오류에 취약함: 만약 C 시스템이 잠시 다운되면 A는 데이터를 어떻게 처리해야 할까요?
- 확장에 한계가 있음: 시스템이 많아질수록 성능이 떨어지고, 유지보수가 어려워집니다.
Kafka는 이런 문제들을 해결해줍니다. 데이터는 A에서 Kafka에 한 번만 보내면 되고, B, C, D는 Kafka에서 데이터를 받아가면 됩니다. 즉, 생산자(Producer)와 소비자(Consumer)를 완전히 분리할 수 있게 되는 것이죠.
3. Kafka의 기본 구성 요소
Kafka를 구성하는 핵심 개념은 아래와 같습니다.
1) Producer
데이터를 Kafka로 보내는 주체입니다. 예를 들어, 웹 서버에서 사용자 행동 로그를 Kafka로 전송하는 것이 이에 해당합니다.
2) Consumer
Kafka에서 데이터를 가져가는 주체입니다. 예를 들어, 분석 시스템이 Kafka에서 사용자 로그를 수신해 분석하는 식이죠.
3) Broker
Kafka 서버입니다. 데이터가 이곳에 저장되고, Producer와 Consumer는 이 Broker를 통해 데이터를 주고받습니다. Kafka는 일반적으로 여러 대의 Broker로 구성되어 있으며, 이들로 클러스터를 구성합니다.
4) Topic
Kafka에서 데이터는 Topic이라는 단위로 구분됩니다. Topic은 일종의 카테고리라고 생각하면 됩니다. 예를 들어, “user-login”이라는 Topic에는 로그인 로그만 모이게 할 수 있습니다.
5) Partition
Topic은 하나 이상의 Partition으로 나뉘어 저장됩니다. 각 Partition은 독립적으로 동작하며, 덕분에 Kafka는 병렬로 데이터를 처리할 수 있고, 성능이 매우 뛰어납니다.
4. Kafka는 어떻게 작동하나?
Kafka의 데이터 흐름을 간단히 정리해보면 아래와 같습니다.
- Producer가 특정 Topic으로 데이터를 전송합니다.
- Kafka는 이 데이터를 해당 Topic의 Partition에 저장합니다.
- Consumer는 원하는 Topic을 구독(subscribe)하여 데이터를 가져갑니다.
- Consumer는 자신이 어디까지 읽었는지를 Kafka에 알려주고, 그 이후부터 계속 데이터를 읽습니다.
중요한 점은, Kafka는 데이터를 일정 기간 동안 저장해준다는 점입니다. 일반적인 메시지 큐와는 달리, Kafka는 소비자가 데이터를 읽었는지 여부에 상관없이 데이터를 일정 기간 유지합니다(기본 7일). 이를 통해 같은 데이터를 여러 소비자가 서로 독립적으로 읽을 수 있게 됩니다.
5. Kafka의 강점과 활용 사례
Kafka는 다음과 같은 장점이 있습니다.
- 높은 처리량: 초당 수백만 건의 메시지를 처리할 수 있습니다.
- 확장성: Partition을 늘리면 성능을 선형적으로 확장할 수 있습니다.
- 내결함성: 복제(replication) 구조로 구성되어 장애에 강합니다.
- 유연한 통합: 다양한 시스템과 손쉽게 연동할 수 있는 커넥터(Connector) 생태계를 갖추고 있습니다.
실무에서 Kafka는 어디에 쓰일까?
- 로그 수집 시스템: 수천 대의 서버에서 쏟아지는 로그를 Kafka로 수집해 ELK(Elasticsearch, Logstash, Kibana)로 분석.
- 실시간 분석: 사용자 행동 데이터를 Kafka로 전송하고, 실시간 분석 플랫폼(예: Apache Flink)에서 분석.
- 모니터링 시스템: 마이크로서비스 아키텍처에서 서비스 간 상태 정보를 Kafka로 전송하여 모니터링 대시보드에 표시.
- 이벤트 기반 시스템: 주문, 결제, 배송 같은 비즈니스 이벤트를 Kafka를 통해 연결.