본문 바로가기
Back-End/kafka

[Kafka] 카프카 소개

by hongdor 2023. 2. 14.
728x90

참고 : 공식홈페이지

Apache Kafka

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

Kafka INTRODUCTION

 

1. 이벤트 스트리밍이란?

기술적으로 이벤트 스트리밍은 데이터베이스, 센서, 모바일 장치, 클라우드 서비스, 소프트웨어 응용 프로그램과 같은 이벤트 소스로부터 실시간으로 데이터를 캡처하는 작업이다.

 

예시)

  • 나중에 검색할 수 있도록 지속적으로 저장
  • 과거 혹은 실시간의 데이터에 반응하고, 데이터를 다루고 처리하는 것
  • 이벤트 데이터를 다른 목적지로 보내는 것

 

2. 어디에 사용해야 하는가?

  • 금융 산업 : 주식 교환, 은행, 보험
  • 자동차 산업 : 자동차, 트럭 등 실시간 위치 추적
  • IoT : 센서 데이터 분석 및 캡쳐
  • 사용자 행동에 즉각 반응이 필요한 경우 : 호텔 예약 등
  • 의료 산업 : 환자 모니터링
  • 회사의 여러 데이터를 연결, 저장 및 사용하는 경우
  • 기반 역할을 수행 : 마이크로 서비스, 데이터 플랫폼, 이벤트 기반 아키텍처

 

3. 이벤트 플랫폼이란?

  • public(wirte) and subscribe(read) 하는 것
  • 저장 하는 것
  • 이벤트가 발생할 때 또는 소급하여 이벤트 스트림을 처리하는 것

카프카는 위 기능들을 분산되고 확장성이 뛰어나며 탄력적이며 장애를 방지하고 안전한 방식으로 제공한다.

베어메탈 하드웨어, 가상 머신 및 컨테이너, 사내 및 클라우드에 구축할 수 있다.

Kafka 환경을 자체 관리하거나 다양한 공급업체에서 제공하는 완벽한 관리 서비스들을 사용할 수 있다.

 

4. 어떻게 카프카가 동작하는가

 

카프카는 고성능 TCP 프로토콜을 사용하는 서버와 클라이언트로 이루어져 있다

  • 서버 : 여러 데이터 센터 또는 클라우드 영역에 걸쳐 있는 하나 이상의 서버 클러스터로 실행된다. 이 서버 중 일부는 브로커라 불리는 저장 레이어를 형성한다. 다른 서버들을 카프카 커넥트를 구동한다. 카프카 커넥트는 지속적으로 데이터를 가져오고 내보낸다. 서버에 장애가 발생하면 다른 서버가 작업을 인계받아 데이터 손실 없이 지속적인 운영을 보장한다.
  • 클라이언트 : 이를 통해 읽고 쓰는 분산된 응용 프로그램과 마이크로 서비스를 작성할 수 있다. 작성된 서비스들은 병렬로, 대규모로, 네트워크 문제나 시스템 장애가 발생한 경우에도 데이터 로스없이 이벤트 스트림을 안전하게 처리할 수 있다. 클라이언트는 자바와 스칼라에서 사용할 수 있으며, 고급 카프카 스트림 라이브러리를 포함하여 Go, 파이썬, C/C++ 및 기타 많은 프로그래밍 언어와 REST API에서 사용할 수 있다.

5. 메인 컨셉과 용어

  • Event
    • 발생한 어떤 사건이다. record or message 라고도 불린다
    • 이벤트는 key, value, timestamp, optional metadata headers를 가진다.
    • 예시)Event value: "Made a payment of $200 to Bob"
    • Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
    • Event key: "Alice"
  • Producer
    • 카프카로 이벤트를 publish(write)하는 client들이다.
  • Consumer
    • Producer가 카프카로 발행한 이벤트를 subscribe(read and process)하는 client다.
  • Producer & Consumer
    • producer와 consumer는 완전히 분리되어있고 서로를 알 수 없다. 이것은 높은 확장성을 달성하기 위한 핵심 설계 요소이다.
    • 예를 들어 producer는 절대 consumer를 기다릴 필요가 없다. Kafka는 이벤트를 한 번만 정확하게 처리할 수 있는 기능과 같은 다양한 보증을 제공한다.
  • Topics
    • 이벤트들은 토픽에 정돈되고 저장된다. topic은 폴더와 같은 개념이다. 이벤트들은 폴더의 파일이다. 예를들어 payments(결재)라는 이름의 topic이 있을 수 있다. topic들은 항상 multi-producer, multi-subscriber이다. topic은 topic에 event를 넣을 producer를 여러개 가질 수 있다. 또한 이러한 이벤트를 subscribe할 많은 consumers들을 가질 수 있다. 전통적인 messaging 시스템과 다르게 사라지지 않고 필요할때마다 topic의 event 를 읽을 수 있다. Kafka의 성능은 데이터 크기와 관련하여 효과적으로 일정하므로 데이터를 오랫동안 저장해도 괜찮다.(성능에 문제가 없다)
  • Partition
    • topic들은 여러 partition으로 나누어 저장된다. topic은 다른 kafka borker들에 위치한 buckect들에 흩뿌려져있다.
    • 분산된 데이터는 확장성을 위해 매우 중요하다. 왜냐하면 client들이 동시에 데이터를 읽고 쓸 수 있기 때문이다.
    • 새로운 event가 topic에 publish 되면 topic partition들 중 하나에 추가된다. (같은 키(ex. user id 또는 장치 id)를 가진 event는 같은 partition에 써진다.) 카프카는 한개의 topic-partition에 대해 어떤 consumer 라도 항상 그들이 쓰여진 순서대로 event를 읽도록 보장한다
    • 즉 한개 topic 안의 여러 event들이 partition들에 나눠서 저장된다. 하지만 같은 key를 가진 event는 같은 partition에 들어가고 1개의 partition에 대해서 읽을 때 순서가 보장되므로 같은 key를 가진 event는 read 순서가 보장된다.
  • Replicated
    • 데이터 손실을 막기 위해 모든 topic을 replicated 될 수 있다. 항상 여러 broker들은 데이터 카피본(replication)을 가지고 있다.
    • 일반적은 세팅은 3개의 replication을 갖는 것이다.
    • replication은 topic-partition 레벨에서 진행된다
728x90

'Back-End > kafka' 카테고리의 다른 글

[Kafka streams] 컨셉  (0) 2023.02.26
[Kafka streams] Tutorial  (0) 2023.02.23
[Kafka streams] 데모 App 실행  (0) 2023.02.23
[Kafka streams] Kafka streams 소개  (0) 2023.02.23
[Kafka] 빠른 시작 예제  (0) 2023.02.15

댓글