2020년 9월 20일 일요일

Apache Kafka [1] - 개요 및 아키텍처

카프카는 이벤트스크리밍(Event Streaming)기반 메세징시스템(Messaging System)으로 실시간 데이터를 저장, 조작, 다른목적지로 배치작업 등을 하기에 용이하다. 


메세징시스템이란?

메세징시스템은 한 어플리케이션에서 다른 어플리케이션으로 데이터를 전송하는 역할을 한다. 분산메세징시스템은 메세지 큐를 기반으로 어플리케이션과 메세지 큐 사이에 비동기적(Asynchronously)으로 작동한다.

보통 2개의 타입의 메세징패턴이 제공되는데 포인트 투 포인트(point-point)와 게시구독(pub-sub)시스템이다.


포인트 투 포인트 메세징시스템(point to point messaging system)

대표적인 예로 주문처리시스템을 생각하면 된다. 한 명 이상의 소비자가 큐에 있는 메세지를 소비할 수 있지만 특정 메세지는 한 명의 소비자만 소비할 수 있다.



게시-구독 메세징시스템(publish-subscribe messaging system)

포인트 투 포인트 시스템과 달리 소비자들은 하나 이상의 큐에있는 데이터를 소비할 수 있다. 게시-구독 시스템에선 생산자를 Publisher라 하고, 메세지 소비자를 Subscriber라고 한다. 간단한 예로 TV채널을 들 수 있는데, 누구나 자신이 가입한 채널을 시청할 수 있듯이 Subscriber들은 연결되기만 하면 누구든 큐에서 데이터를 가져다 올 수 있다.


카프카도 분산된 게시-구독 메세징시스템이며, 대량의 데이터를 처리함과 동시에 데이터손실을 막기위해 데이터들은 클러스터 내에 복제된다. 카프카는 Zookeeper서비스 위에서 작동하며 아파치 스톰, 스파크 등과 연동하여 실시간 스트리밍분석 또한 용이하다.


카프카의 장점(Benefits)

  • 성능(Performance) - 카프카는 고성능 TCP네트워크 프로토콜을 통해 통신하는 분산형 시스템이다. 이는 모든 쓰기가 OS(RAM) 캐시로 수행하기 때문에 가능한데, 때문에 초당 200만번의 쓰기 작업을 수행 할 수 있다. 
  • 신뢰성(Reliability) - 대기시간이 짧은 메세지 전달을 지원하며, 분산/분할/복제를 통해 시스템 장애 발생 시 결함되지 않는 안정성을 보장한다. 
  • 확장성(Scalability) - 프로듀서와 컨슈머의 분리로 Hive, Hbase, Python 등과 같이 다양한 어플리케이션과 사용하기 쉬우며 다운타임(down time)없이 쉽게 확장 가능하다.
  • 내구성(Durability) - 카프카는 분산커밋로그(Distributed commit log)를 사용하여, 중간에 데이터를 잃어도 재생할 수 있어 내구성이 뛰어나다. 



주요 개념(main concepts)


- 카프카 아키텍처(kafka architecture)

  • Topics - 특정 범주에 속하는 메세지 스트림. 토픽을 통해 Producers와 Consumers가 데이터를 전송한다.
  • Partition - Topic을 이루는 단위. 토픽은 수많은 파티션으로 구성된다.
  • Partition offset - 파티션을 구분하는 시퀀스ID
  • Replicas of partition - 파티션 백업을 위한 복제본. 데이터를 읽거나 쓰지 않으며 단지 데이터 손실이 있을 경우 사용된다.
  • Brokers - 데이터를 관리하는 시스템. 각 브로커는 주제당 0개 이상의 파티션을 가질 수 있다.
  • Kafka Cluster - 카프카 브로커 1개 이상이 있는 것을 클러스터라고 부른다. 클러스터는 다운타임(down time)없이 확장할 수 있으며 메세지 데이터의 지속성과 복제를 관리하는데 사용된다.
  • Producers - 프로듀서는 하나이상의 카프카 토픽(Topic)을 제공한다. 프로듀서는 토픽의 파티션에 데이터를 전송하며 메세지를 퍼블리싱할 때마다 브로커가 파시션의 마지막 세그먼트 파일에 메세지를 첨부한다. 
  • Consumers - 컨슈머는 하나 이상의 토픽에 연결되어 있고 브로커로부터 데이터를 읽는다.
  • Leader - 리더는 주어진 파티션에 대한 모든 읽기,쓰기를 담당하는 노드다. 모든 파티션에는 리더 역할을 하는 하나의 서버가 있다. 
  • Follower - 리더의 지시를 따르는 노드. 리더가 결함시 팔로워 중 한명이 자동으로 새로운 리더가 된다. 팔로워는 메세지를 끌어들이고 자신의 데이터 저장소를 업데이트 한다.
  • Consumer Group - 컨슈머의 집합을 구성하는 단위. 컨슈머 그룹 안의 컨슈머 수만큼 파티션의 데이터를 분산처리한다.


- 프로듀서와 컨슈머 Read/Write Work Flow




댓글 없음:

댓글 쓰기