Skip to main content

개발자와 협업을 위한 kafka의 핵심 개념 1

카프카 소개

alt

문제 정의

기업의 MSA 환경에서는 수많은 서버들이 존재한다.

  • 서버간 데이터를 주고 받을때 간단한 시스템이면 쉽다.
  • 하지만 수십개의 시스템이 서로 엉킨 상태로 데이터의 흐름이 발생하는 시스템이라고 생각해보면
  • 매우 복잡하고, 유지 비용이 기하급수적으로 증가한다.

데이터를 주고받는 프로토콜도 매우 다양하다.

  • TCP, HTTP, REST, FTP, RPC, JDBC 등등

데이터를 보내는 포멧도 매우 다양하다.

  • 바이너리, CSV, JSON, XML, protobuf

특히나 데이터 스키마가 변경되면 , 이에 의존하고 있는 서버들까지 장애가 번질 수 있음

해결 (카프카)

카프카라는 컴포넌트로 서버간에 디커플링을 도입한다.

alt

  • 카프카는 링크드인에서 만든 오픈소스입니다.
  • 분산 환경에서 복원력이 뛰어나며, 장애를 허용하는 아키텍처입니다.
  • 수평 확장성이 좋습니다.
    • 메시지 브로커의 수를 늘릴 수 있습니다.
    • 초당 수백만 건의 메시지 전달이 가능합니다.
  • 실시간으로 고성능 메시지 전달이 가능하며, 레이턴시는 10ms 미만입니다.

비동기 vs 동기식 처리

동기식 처리

  • REST API : 서버로 요청했다가 반드시 응답을 기다린다.

비동기식 처리

  • 요청을 보내고, 추후 완료여부 체크.
  • Pub/Sub, MessageQueue

메세지 브로커

  • MessageQueue 구현
  • Redis : 빠른 실시간 처리, 내구성이 덜 중요.
  • Kafka : 높은 내구성, 여러 소비자.
  • *Kafka, Redis PubSub 는 서버(언어) 영향을 받지 않는다.
  • *Redis는 특정 라이브러리에 종속될 수 있다.( python - celery, node.js - bull.js )

usecase 및 사례

사용 사례

  • 메시징 시스템
  • 유저 활성화 추적
  • 다른 지역의 메트릭 수집
  • 애플리케이션 로그 수집

특징

  • 스트림 프로세싱
  • 시스템 간 디커플링
  • 스파크, 하둡 등 많은 빅데이터 플랫폼과 통합 가능
  • pub/sub 마이크로서비스

실제 사례

  • 넷플릭스: 유저가 영상 시청 중 실시간으로 다음 추천 영상 업데이트 서비스
  • 우버: 사용자, 택시, 여행 데이터를 실시간 수집 및 수요 예측 서비스
  • 링크드인: 스팸 방지 서비스, 사용자 상호작용 데이터 수집으로 관계 추천 서비스

코드 자료

https://www.conduktor.io/apache-kafka-for-beginners/