[Kafka] Kafka 역사와 소개 _TIL

Kafka의 역사

- Kafka의 탄생

  • 2008년 LinkedIn에서 내부 실시간 데이터 처리를 위해 개발한 소프트웨어 플랫폼
    • Scala와 Java로 작성
  • 2011년 초에 오픈소스화 (Apache)
  • 현재 포춘지 선정 100대 기업 중 80%이상이 Kafka를 사용

- Kafka의 발전

  • 2014년 Kafka 개발자들이 LinkedIn에서 나와 Confluent라는 회사 창업 (2021년 미국 나스닥 상장)

 

Kafka 소개

- Kafka란 무엇인가?

  • 실시간 데이터를 처리하기 위해 설계된 오픈소스 분산 스트리밍 플랫폼
    • 데이터 재생이 가능한 분산 커밋 로그 (Distributed Commit Log)
  • Scalability Fault Tolerance를 제공하는 Publish-Subscription 메시징 시스템
    • Producer-Consumer(=Subscription)
  • High Throughput과 Low Latency 실시간 데이터 처리에 맞게 구현됨
  • 분산 아키텍처를 따르기 때문에 Scale Out이란 형태로 스케일 가능
    • 서버 추가를 통해 Scalability 달성 (서버 = Broker)
  • 정해진 보유기한 (retention period) 동안 메시지를 저장

- 기존 메시징 시스템 및 데이터베이스와의 비교

  • 기존 메시징 시스템과 달리, 카프카는 메시지를 보유 기간 동안 저장
    • 소비자가 오프라인 상태일 때에도 내구성과 내결함성을 보장
    • 기존 보유 기간은 일주일
  • Kafka는 메시지 생산과 소비를 분리
    • 생산자와 소비자가 각자의 속도에 맞춰 독립적으로 작업이 가능하도록 함
    • 시스템 안정성을 높일 수 있음
  • Kafka는 높은 처리량과 저지연 데이터 스트리밍을 제공
    • Scale-Out 아키텍처
  • 한 파티션 내에서는 메세지 순서를 보장해줌
    • 다수의 파티션에 걸쳐서는 "Eventually Consistent"
    • 토픽을 생성할 때 지정 가능 (Eventual Consistency vs. Strong Consistency)
  • 사내 내부 데이터 버스로 사용되기 시작
    • 워낙 데이터 처리량이 크고 다수 소비자를 지원하기에 가능
  •  
더보기

* Eventual Consistency란?

  • 100대 서버로 구성된 분산 시스템에 레코드를 하나 쓴다면 그 레코드를 바로 읽을 수 있을까?
    • 내가 쓴 레코드가 리턴 가능할까?
    • 보통 하나의 데이터 블록은 여러 서버에 나눠 저장됨 (Replication Factor)
      • 그래서 데이터를 새로 쓰거나 수정하면 이게 전파되는데 시간이 걸림
    • 보통 읽기는 다수의 데이터 카피 중에 하나를 대상으로 일어나기 때문에 앞서 전파 시간에 따라 데이터가 있을 수도 있고 없을 수도 있음
  • Strong Consistency vs. Eventual Consistency
    • 보통 데이터를 쓸때 복제가 완료될 때까지 기다리는 구조라면 Strong Consistency (ex. 결제 정보)
    • 그게 아니라 바로 리턴한다면 Eventual Consistency (ex. 클릭 정보)

 

- Kafka의 주요 기능 및 이점

  • 스트림 처리
    • 실시간 스트림 처리를 목표로 만들어진 서비스
    • ksqlDB를 통해 SQL로도 실시간 이벤트 데이터 처리 가능
  • High Throughput (높은 처리량)
    • 초당 수백만 개의 메시지 처리 가능
  • Fault Tolerance (내결함성)
    • 데이터 복제 및 분산 커밋 로그 기능을 제공하여 장애 대응이 용이
  • Scalability (확장성)
    • 분산 아키텍처는 클러스터에 브로커를 추가하여 쉽게 수평 확장 가능
  • 풍부한 생태계의 존재
    • 커넥터와 통합 도구로 구성된 풍부한 에코시스템을 갖추고 있어 다른 데이터 시스템 및 프레임워크와 쉽게 연동 가능
    • Kafka Connect, Kafka Schema Registry

'Programmers TIL' 카테고리의 다른 글

[Kafka] Kafka 중요 개념 _TIL  (0) 2023.07.12
[Kafka] Kafka 아키텍처 _TIL  (1) 2023.07.12
[Spark] Spark SQL _TIL  (2) 2023.07.05
[Spark] Spark 프로그램 구조 _TIL  (0) 2023.07.04
[Spark] Spark 데이터 시스템 구조 _TIL  (1) 2023.07.04