300===Dev Framework/Apache

Apache Kafka - 실시간 데이터의 택배기사 📦🛵

블로글러 2025. 3. 29. 21:01

"실시간 데이터 스트리밍이 필요할 땐 뭐가 제일 좋을까?"라고 물으면 많은 개발자들이 입을 모아 말하는 이름이 바로 Apache Kafka입니다. 대용량 데이터를 빠르게 처리하면서도 안정성까지 챙긴 Kafka는 마치 실시간으로 데이터를 배달해주는 택배기사 같아요. 한 번에 수천만 건의 데이터를 안전하게 다른 시스템으로 옮겨주죠.


등장 배경

과거엔 시스템 간 데이터를 주고받을 때 파일을 직접 주고받거나, 데이터베이스 간에 복제하거나, 일일 배치 작업을 돌렸어요. 그런데 이 방식은 느리고, 실시간 처리가 어렵고, 확장성이 떨어지는 문제가 있었죠.

Kafka는 LinkedIn에서 처음 개발되어, 실시간 데이터 파이프라인과 스트리밍 앱을 지원하기 위해 만들어졌어요. 이후 오픈소스로 공개되어 전 세계 수많은 기업이 사용 중입니다.

Kafka가 해결하려는 대표적인 문제들은 다음과 같아요:

  1. 실시간 데이터 처리의 어려움: 배치 방식은 실시간성이 부족함
  2. 시스템 간 데이터 전송의 비효율성: 직접 연결은 복잡하고 유지보수가 어려움
  3. 확장성 문제: 데이터 양이 많아지면 기존 방식으론 버티기 어려움

핵심 원리

1. 토픽(Topic) 기반 메시징 구조

Kafka는 메시지를 Topic이라는 이름의 카테고리로 분류해 저장합니다. 생산자는 토픽에 메시지를 발행하고, 소비자는 해당 토픽에서 메시지를 읽어요.

Producer ──> [Kafka Topic] ──> Consumer

예를 들어, "주문" 관련 데이터는 order-topic, "배송"은 delivery-topic으로 분리해서 관리할 수 있죠.

2. 분산 처리와 파티션

Kafka는 토픽을 Partition으로 나누고, 이 Partition들을 여러 서버에 분산시켜 저장합니다. 이 덕분에 수백 MB/s 수준의 처리량도 거뜬하게 감당할 수 있어요.

order-topic
├── Partition 0: [서버 A]
├── Partition 1: [서버 B]
└── Partition 2: [서버 C]

3. 내구성과 복구 기능

Kafka는 데이터를 디스크에 저장하고, 복제까지 해두기 때문에 서버가 죽어도 메시지를 잃지 않아요. 이를 통해 장애 복구 능력이 매우 뛰어납니다.


사례 소개

Netflix: Kafka를 사용해 사용자 시청 로그, 추천 알고리즘 데이터 등을 실시간으로 수집하고 분석

Uber: 실시간 운행 데이터와 GPS 좌표, 결제 내역 등을 Kafka로 처리

카카오: 채팅 메시지, 알림, 피드 데이터를 Kafka로 스트리밍

📊 아래는 Kafka 사용 구조의 예시입니다:

역할 설명
Producer 데이터를 생성하여 Kafka로 전송 (예: 주문 시스템)
Kafka Broker 데이터를 저장하고 전달하는 역할
Consumer Kafka로부터 데이터를 읽어가는 시스템 (예: 분석 시스템)

주의사항 및 팁 💡

⚠️ 이것만은 주의하세요!

  1. 메시지 유실 방지 설정
    • acks=all, replication.factor >= 2 등을 꼭 설정하세요.
  2. 오프셋 관리
    • 소비자가 어디까지 읽었는지(오프셋)를 잘 관리해야 중복 처리나 유실을 피할 수 있어요.

💡 꿀팁

  • Kafka만 쓰지 말고, Kafka Connect, Kafka Streams 같이 함께 쓰면 더 강력해져요!
  • Schema Registry를 사용하면 메시지 포맷 변경 관리가 쉬워져요.
  • 모니터링 도구(Kafka Manager, Confluent Control Center)를 적극 활용하세요.

마치며

Apache Kafka는 실시간 데이터 스트리밍의 대표 주자입니다. 처음에는 복잡해 보일 수 있지만, 개념을 하나하나 이해하고 사용 사례를 접하다 보면 분산 메시징의 핵심이 얼마나 강력한지 깨닫게 될 거예요 😊


참고 자료 🔖


728x90