Apache Kafka 기본

Kafka란?

  • 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시지 플랫폼
  • Kafka는 Pub-Sub 모델의 메시지 큐이다.
  • 분산 환경에 특화되는 특징을 가지고 있다.
  • 링크드인(LinkedIn)에서 서비스의 확장으로 인한 여러 메시지 큐 시스템을 관리하기 어려워 사내 프로젝트로 개배라 시작, 2011년 초 아파치 공식 오픈소스로 세상에 공개되었다.

Kafka 특징

  • Producer와 Consumer의 분리
    • 카프카는 메시징 전송 방식 중 메시지를 보내는 역할과 받는 역할이 완벽하게 분리된 Pub-Sub 방식을 적용한다.
    • 각자의 역할이 완벽하게 분리되면서, 어느 한쪽 시스템에서 문제가 발생하더라도 연쇄작용이 발생할 확률은 매우 낮다.
  • 멀티 프로듀서, 멀티 컨슈머
    • 카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있다.
    • 데이터 분석 및 처리 프로세스에서 하나의 데이터를 다양한 용도로 사용하는 요구가 많아지기 시작했고, 멀티 기능 덕분에 이러한 요구를 손쉽게 충족할 수 있다.
  • 디스크에 메시지 저장
    • 디스크에 메시지를 저장하고 유지한다.
    • 컨슈머가 메시지를 읽어가더라도 보관 주기 동안 디스크에 메시지를 저장해둔다.
  • 확장성
    • 카프카는 확장이 매우 용이하도록 설계되어 있다. 하나의 카프카 클러스터는 3대의 브로커로 시작해 수집 대의 브로커로 확장 가능하다.
    • 확장 작업은 카프카 서비스의 중단 없이 온라인 상태에서 작업이 가능하다.
  • 높은 성능
    • 고성능을 유지하기 위해 카프카는 내부적으로 분산 처리, 배치 처리 등 다양한 기법을 사용하고 있다.

Kafka 구성 요소

  • Event
    • Event는 Kafka에서 Producer와 Consumer가 데이터를 주고 받는 단위이다.
    • 이벤트 혹은 메시지라고도 한다.
  • Producer
    • Producer는 Kafka에 이벤트를 게시(Post)하는 클라이언트 어플리케이션을 의미한다.
  • Consumer
    • Consumer는 이런한 Topic을 구독하고 이로부터 얻어낸 이벤트를 처리하는 클라이언트 어플리케이션이다.
  • Topic
    • 이벤트가 쓰이는 곳이다.
    • Producer는 이 Topic에 이벤트를 게시한다.
    • 그리고 Consumer는 Topic으로 부터 이벤트를 가져와 처리한다.
    • Topic은 파일 시스템의 폴더와 유사하며, 이벤트는 폴더안에 파일과 유사하다.
    • Topic에 저장된 이벤트는 필요한 만큼 다시 읽을 수 있다.
    • Partition
      • Topic는 여러 Broker에 분산되어 저장되며, 이렇게 분석된 Topic을 Partition이라고 한다.
      • 어떤 이벤트가 Partition에 저장될지는 이벤트 key(키)에 의해 정해지며, 같은 키를 가지는 이벤트는 항상 같은 Partition에 저장된다.
      • Kafka는 Topic의 Partion에 지정된 Consumer가 항상 정확히 동일한 순서로 Partition의 이벤트를 읽을 것을 보장한다.

Kafka 주요 개념

  • Producer와 Consumer의 분리
    • Producer와 Consumer는 완전 별개로 동작한다.
      • Producer는 Broker의 Topic에 메시지를 게시하기만 한다.
      • Consumer는 Broker의 특정 Topic에서 메세지를 가져와 처리하기만 한다.
  • Push와 Pull 모델
  • 소비된 메세지 추적(Commit과 Offset)
  • Consumer Group
  • 메시지(이벤트) 전달 컨셉