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 url : https://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 데이터 읽기
'빅데이터 > Kafka' 카테고리의 다른 글
Apache Kafka에서 topic의 partition 개수 줄이는 방법? (268) | 2018.12.26 |
---|---|
아파치 Kafka Consumer의 데이터 처리 내부 architecture 설명 및 튜닝포인트 (369) | 2018.12.24 |
아파치 Kafka Producer의 데이터 처리 내부 architecture 설명 및 튜닝포인트 (371) | 2018.12.24 |
Spring boot에서 kafka 사용시 application.yaml 설정 (578) | 2018.11.06 |
Spring boot scheduler를 활용한 kafka producer/consumer 예제 (580) | 2018.11.06 |
Macbook에 Kafka 1분만에 설치하기 (688) | 2018.11.06 |