Writing /var/www/html/dokuwiki/data/cache/f/ff9b933d9963fe0d54693dcdc1b9c9f5.xhtml failed

Apache Kafka

http://kafka.apache.org/


- Kafka Architecture

1. Apache Kafka?

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.
카프카는 분산, 파티션, 복제 커밋 로그 서비스이다. 메시징 시스템 기능을 제공하나, 유니크한 디자인이다.



2. Apache Kafka 구성 요소 및 동작

Kafka는 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 producer, consumer, broker로 구성된다.

높은 성능과 다양한 언어를 지원하기 위해 클라이언트와 서버간의 통신은 TCP protocol을 이용한다.


  • Topic : 발행(Publish)된 메시지들의 category
  • Log : Producers가 생성한 메시지
  • Producers : 특정 Topic에 해당하는 메시지를 생성하는 프로세스, 메시지를 Broker에 전달(발행/Publish)
  • Broker : Producers와 Consumers가 만날 수 있도록 메시지를 관리하는 서버 클러스터로 Producer에게서 전달받은 메시지를 Topic별로 분류한다. 여러대의 Broker Cluster로 구성 가능하며, Zookeeper에 의해 각 노드가 모니터링 된다.
  • Consumers : Broker에게서 구독(Subscribe)하는 Topic의 메시지를 가져와 사용(처리)하는 프로세스


LOLApache Kafka 구성 요소 및 동작 상세 보기



3. Apache Kafka 등장 배경

  • LinkedIn은 2009년 서비스 가입자가 폭증하며 자신들의 내부 데이터 처리 과정에서 한계를 느끼고, 자사에서 웹사이트가 생성하는 다양한 소스로부터 나오는 대량의 이벤트를 처리하기 위해 Scala를 사용하여 개발하었다.
  • Kafka는 2011년 6월에 아파치 인큐베이터 프로젝트에 등록되었고 불과 1년 만인 2012년 10월에 아파치 인큐베이터를 졸업해 아파치 탑 프로젝트로 승격되어 현재는 Apache 정식 프로젝트로 등록되어 관리되고 있다.
  • 저지연성을 가지지만, 스루풋(throughput)에 주안점을 두지 않은 액티브엠큐(ActiveMQ)와 다양한 소비자를 다룰 때 지연시간(latency)을 보장하지 못하는 플룸(Flume)과 스크라이브(Scribe) 두 솔루션 간의 큰 차이를 메우기 위해 만들어졌다. 하둡 같은 대용량 배치 처리 시스템과 스트리밍 처리를 하는 스톰에 데이터를 전달하는 중간자 역할을 할 수 있다.


- 컴퓨터 기술에서, 스루풋은 주어진 시간 동안에 컴퓨터가 할 수 있는 일의 양
- 데이터 통신에서, 스루풋은 주어진 시간 동안 한 지점에서 다른 지점으로 옮겨진 데이터의 양
- ActiveMQ란 : https://blog.bluecore.kr/?p=174
자바로 만든 JMS를 지원하는 클라이언트를 포함한 브로커이며, 자바 뿐만 아니라 만든 다양한 언어를 이용하는 시스템들이 통신(커뮤니케이션)할 수 있게 해준다.
- Flume이란 : Flume은 Log aggregator 즉 로그 수집기이다. 수많은 서버에 분산되어 있는 많은 양의 로그 데이터를 flume을 통해서 한 곳으로 모을 수 있도록 해준다.



4. Apache Kafka 기존 메시징 시스템과의 차이점

(기존 메시징 시스템: ActiveMQ, RabbitMQ 등)

  • 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템으로써 기존 범용 메시징 시스템대비 TPS가 매우 우수하다. 단, 특화된 시스템이기 때문에 범용 메시징 시스템에서 제공하는 다양한 기능들은 제공되지 않는다.
  • 분산 시스템을 기본으로 설계되었기 때문에, 기존 메시징 시스템에 비해 분산 및 복제 구성을 손쉽게 할 수 있다.
  • AMQP 프로토콜이나 JMS API를 사용하지 않고 단순한 메시지 헤더를 지닌 TCP기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드를 감소시켰다.
  • Producer가 broker에게 다수의 메시지를 전송할 때 각 메시지를 개별적으로 전송해야하는 기존 메시징 시스템과는 달리, 다수의 메시지를 batch형태로 broker에게 한 번에 전달할 수 있어 TCP/IP 라운드트립 횟수를 줄일 수 있다.
  • 메시지를 기본적으로 메모리에 저장하는 기존 메시징 시스템과는 달리 메시지를 파일 시스템에 저장한다.
  1. 파일 시스템에 메시지를 저장하기 때문에 별도의 설정을 하지 않아도 데이터의 영속성(durability)이 보장된다.
  2. 기존 메시징 시스템에서는 처리되지 않고 남아있는 메시지의 수가 많을 수록 시스템의 성능이 크게 감소하였으나, Kafka에서는 메시지를 파일 시스템에 저장하기 때문에 메시지를 많이 쌓아두어도 성능이 크게 감소하지 않는다. 또한 많은 메시지를 쌓아둘 수 있기 때문에, 실시간 처리뿐만 아니라 주기적인 batch작업에 사용할 데이터를 쌓아두는 용도로도 사용할 수 있다.
  3. Consumer에 의해 처리된 메시지(acknowledged message)를 곧바로 삭제하는 기존 메시징 시스템과는 달리 처리된 메시지를 삭제하지 않고 파일 시스템에 그대로 두었다가 설정된 수명이 지나면 삭제한다. 처리된 메시지를 일정 기간동안 삭제하지 않기 때문에 메시지 처리 도중 문제가 발생하였거나 처리 로직이 변경되었을 경우 consumer가 메시지를 처음부터 다시 처리(rewind)하도록 할 수 있다.
  • 기존의 메시징 시스템에서는 broker가 consumer에게 메시지를 push해 주는 방식인데 반해, Kafka는 consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작한다. 따라서 consumer는 자신의 처리능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있다.
  1. 기존의 push 방식의 메시징 시스템에서는 broker가 직접 각 consumer가 어떤 메시지를 처리해야 하는지 계산하고 어떤 메시지를 처리 중인지 트랙킹하였는데, Kafka에서는 consumer가 직접 필요한 메시지를 broker로부터 pull하므로 broker의 consumer와 메시지 관리에 대한 부담이 경감되었다.
  2. 메시지를 pull 방식으로 가져오므로, 메시지를 쌓아두었다가 주기적으로 처리하는 batch consumer의 구현이 가능하다.
  • 그러나 모든 메세지에 대해 Broker로부터 답신 응답(acknowledgement response)를 기다리게 된다. 이에 따라, Throughput의 효율성 측면에서는 처리속도가 느려진다는 단점이 있다.



5. Apache Kafka 주 사용 분야 및 목적


현재 LinkedIn에서 사용자들에게 잘 알려진 PYMK(People You May Know)등의 서비스가 대표적인 적용사례이다.

해외에서는 Twitter, Netflix, Tumblr, Foursquare 등의 기업과 대용량 메세징을 다루는 기업에서 Apache Kafka를 도입하여 사용하고 있다.

  • LinkedIn: 스트리밍 activity data를 모은다.
  • DataSift: 데이터시프트는 카프카로 콜렉터를쓴다. 모니터링을 위한 유저의 스트림들을 실시간으로 모니터링하기위해
  • Twitter: 스톰의 한파트로 쓴다.
  • Foursquare : 온라인,오프라인 메세징 시스템에 쓴다.



6. Apache Kafka 설치 및 실행

7. 참조 사이트

  1. [Apache Kafka 사이트] : http://kafka.apache.org/
  2. [Apache Kafka] 1. 소개및 아키텍처 정리 :http://epicdevs.com/17
  3. Apache Kafka 성능 테스트 : http://blog.embian.com/19
  4. Apache Kafka intro 변역 : http://springloops.tistory.com/103
  5. Apache Kafka 정의, 성능테스트, 유용 튜토리얼, … : http://jokergt.tistory.com/180