본문 바로가기

빅데이터/Kafka

빅 데이터 처리를 위한 아파치 Kafka 개요 및 설명

Apache Kafka

LinkedIn에서 최초로 만들고 opensource화 한 확장성이 뛰어난 분산 메시지 큐(FIFO : First In First Out)


→ 분산 아키텍쳐 구성, Fault-tolerance한 architecture(with zookeeper), 데이터 유실 방지를 위한 구성이 잘되어 있음

→ AMQP, JMS API를 사용하지 않은 TCP기반 프로토콜 사용

→ Pub / Sub 메시징 모델을 채용

→ 읽기 / 쓰기 성능을 중시

→ Producer가 Batch형태로 broker로 메시지 전송이 가능하여 속도 개선

→ 파일 시스템에 메시지를 저장하므로, 데이터의 영속성 보장

→ Consume된 메시지를 곧바로 삭제하지 않고 offset을 통한 consumer-group별 개별 consume가능


# Kafka website url http://kafka.apache.org/

# Github urlhttps://github.com/apache/kafka

# Kafka contributors https://github.com/apache/kafka/graphs/contributors


Kafka 사용 주요 사례

LinkedIn : activity streams, operational metrics, data bus(400 nodes, 18k topics, 220B msg/day in May 2014)

Netflix : real-time monitoring and event processing

Twitter : as part of their Storm real-time data pipelines

Spotify : log delivery, Hadoop

11번가 : 카프카를 이용한 비동기 주문시스템(카프카 컨슈머 애플리케이션 배포 전략 medium post)


Kafka Architecture


Broker : Kafka를 구성하는 각 서버 1대 = 1 broker

Topic : Data가 저장되는 곳

Producer : Broker에 data를 write하는 역할

Consumer : Broker에서 data를 read하는 역할

Consumer-Group : 메세지 소비자 묶음 단위(n consumers)

Zookeeper : Kafka를 운용하기 위한 Coordination service(zookeeper 소개)

Partition : topic이 복사(replicated)되어 나뉘어지는 단위


Kafka 데이터 쓰기, 복제, 저장

Producer는 1개이상의 partition에 나뉘어 데이터를 write한다.
상기 partition에 적힌 번호는 각 partition의 offset번호임.


각 Topic의 partition은 1개의 Leader Replica + 0개 이상의 follower Replica로 구성

→ Leader Replica에 데이터를 write, 다른 broker에 follower replica로 복제

→ Topic의 데이터(log) 중 replica 데이터는 log segment라는 파일(disk)에 기록

→ 메모리가 남아 있으면 페이지 캐시 사용


Kafka 데이터 읽기


Consumer는 Partition단위로 데이터를 병렬로 읽을 수 있음
→ 복수의 Consumer로 이루어진 Consumer group을 구성하여 1 topic의 데이터를 분산하여 처리 가능
Topic partition number >= Consumer Group number 일 경우만 가능
   (Topic partition number < Consumer Group number일 경우 1개 이상의 consumer는 유휴 상태가 됨)


첨부파일 :  apache kafka architecture.key