4. Internal Use Only
Linkedin의 고민
01. Kafka Overview
Frontend
Server
Frontend
Server
Metric
Server
Frontend
Server
Frontend
Server
Application Metrics Application Metrics Application Metrics Application Metrics
5. Internal Use Only
Linkedin의 고민
장애
01. Kafka Overview
Frontend
Server
Frontend
Server
Metric
UI
Frontend
Server
Frontend
Server
Database
Server
Database
Server
Chat
Server
Chat
Server
Chopping
Cart
Active
Monitoring
Data
Monitor
Metric
Analysis
6. Internal Use Only
A Centralized Data Pipeline
01. Kafka Overview
Frontend
Server
Frontend
Server
Metric
UI
Frontend
Server
Frontend
Server
Database
Server
Database
Server
Chat
Server
Chat
Server
Chopping
Cart
Active
Monitoring
Data
Monitor
Metric
Analysis
Message System
7. Internal Use Only
01. Kafka Overview
출처: https://en.wikipedia.org/wiki/Franz_Kafka
Franz Kafka
8. Internal Use Only
Kafka ?
분산 비동기 메시징 시스템
Linkedin에서 개발 되어 2011년 오픈소스로 공개
발행(Producer), 소비(Consumer) ,중개(Broker) 구조로 구성
Tcp기반으로 오버헤드 감소시켜서 동작
다른 메시징 시스템과 다르게 일정기간 저장
-> 장애 발생시 다시 메시지 처리(Rewind) 가능
파일 시스템에 메시지 저장 -> 영속성(Durability) 보장
01. Kafka Overview
9. Internal Use Only
비동기 메시지 시스템
메일을 보내면 메일 서버에 저장 메일을 받는 사람은 자신이 필요할 때 수신 하는 비동기 구조
메일시스템과 동일 하게 Producer가 메시지를 보내면 Kafka Cluster에 저장 , Consumer가 필요할 때
메시지를 가져오는 구조
01. Kafka Overview
출처: https://en.wikipedia.org/wiki/Franz_Kafka
Kafaka Cluster ConsumerProducer
메일 수신메일 전송 메일 서버
10. Internal Use Only
Why Kafka?
Producers 와 Consumers 역할 분리
.하나의 topic에 대하여 여러 Producers 가 message를 전송하고 여러 Consumers 가 message를 소비하는
구조로 중앙 집중 형 구조로 구성
Scalable
. Kafka cluster를 통하여 확장이 어느정도 용이 하게 설계
High Performance
. 분산처리 - 동일한 기능을 하는 여러 대의 서버로 이뤄진 분산 시스템으로 구성되어, 단일 시스템보다
더 높은 성능을 얻으며, SPOF 극복
. 배치 처리 - 작은 i/o 에 대하여 묶어서 처리 하여 속도 향상에 도움
. 페이지 캐시 - 파일시스템에 쓰기 전에 페이지캐시를 통하여 높은 속도 보장(실제로 하드웨어 권고
사항에 sata disk를 사용해도 무방하다고 함)
이기종과의 호환성
배치 단위 전송 및 압축 전송 가능
01. Kafka Overview
11. Internal Use Only
Disk-Based Retention(Persistent)
다른 Message-system 과 다르게 파일시스템을 Message 주 저장소로 사용
Memory에 별도의 Cache 없이 OS의 Page Cache 사용
Page Cache 로 read() 함수 호출 없이
직접 mapping된 주 메모리 참조
01. Kafka Overview
출처: http://www.yunweipai.com/archives/11749.html
Page Cache
File System
Buffer Cache Disk
User Process
Kernel
User Process
pdflush
INode & metadata
12. Internal Use Only
Disk-Based Retention
Cousumer가 파일시스템에 데이터 전송 시 zero-copy 사용
zero-copy(무복사) : 디스크에서 파일을 읽어 소켓에 담은 뒤 응답 하지 않고 ,
커널 영역에서 파일 데이터를 읽고 바로 소켓에 데이터를 담아 전달
01. Kafka Overview
출처: https://www.ibm.com/developerworks/linux/library/j-zerocopy/
출처: https://www.slideshare.net/springloops/apache-kafka-intro20150313springloops-46067669
13. Internal Use Only
Kafka 구조
Producer : 메시지를 Broker로 전송
Broker : Producer가 보낸 메시지를 저장
Consumer : Broker에 있는 메시지를 소비
01. Kafka Overview
Kafaka Broker
ConsumerProducer
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Producer
Producer
Consumer
Consumer
Consumer
Consumer
14. Internal Use Only
Kafka Broker 구조
Producer가 보낸 메시지를 구분 하기 위하여 Broker에는 Topic으로 구분 하여 메시지 저장
01. Kafka Overview
Producer msg0
Broker
msg1msg2 Topic
Topic
Topic
15. Internal Use Only
Kafka Topic Partition
Producer 가 Message 를 전송 할 때 1개의 Topic으로 Partitioning이 안되어 있을 경우 1개의 Message를 낼
때 1초가 걸린다면 3개의 Message를 보낼 때 3초가 소요
02. Kafka Topic Partitioning
Producer
msg0
msg1
msg2
Topic
Partition 1
Partition 2
Partition 3
Producer msg0 Topicmsg1msg2
Partitioning 된다면 동일한 작업에 대하여 Partition 갯수에 비례 하여 처리 속도가 향상
16. Internal Use Only
Kafka Partition
Partition 은 Offset 0부터 순차적으로 쓰이고, offset0부터 순차적으로 읽혀진다.
02. Kafka Topic Partitioning
Producer
msg0
msg1
msg2
Topic
Partition 1
Partition 2
Partition 3
0 1 2 3
0 1 2
0 1 2
Kafka Partition Disadvantages
무조건 증가 했다고 전체 처리 성능이 증가 하는 것은 아니며, 그만큼 consumer가 추가 되어야 한다 .
추가만 가능 하며, 줄일 수는 없다. (초기에 낮게 시작하여 높이는 것을 추천)
장애 복구 시간 증가 (controller broker 장애시)
17. Internal Use Only
Kafka Replication
고가용성을 위하여 topic에 대한 replication(복제) 기능을 제공
Kafka cluster 는 Replication을 할 경우 broker들 간에
Leader를 우선 선출
이때 선출된 leader는 모든 Read/Write 가 발생
03. Kafka Topic Replication
Kafka cluster
Topic replication
Producer
Broker 1
Broker 2
Broker 3
message
Leader
Follower
18. Internal Use Only
Kafka Replication
Leader는 follower라는 replication 대상으로 message Replication
Leader가 장애 발생된다면 다른 follower가 Leader로 승격
Leader에 대한 선출 및 승격은 Zookeeper가 결정
03. Kafka Topic Replication
Kafka cluster
Topic replication
Producer
Broker 1
Broker 2
Broker 3
message
Leader
Follower
replication
19. Internal Use Only
Kafka Zookeeper
Zookeeper: Hadoop의 서브 프로젝트, Hadoop의 분산 어플리케이션을 관리 하는 코디네이션
어플리케이션으로 사용
추가적인 개발 리소스를 줄이고자 Zookeeper를 코디네이션 Kafka의 분산 어플리케이션의 코디네이션
어플리케이션으로 사용
03. Kafka Topic Replication
Producer broker consumer
zookeeper
Broker and
topic metadata
consumer metadata
partition offsets
20. Internal Use Only
Kafka Zookeeper
앙상블이라는 이름의 클러스터를 구성 하며, 일반적으로 3대 이상의 홀수 단위로 서버를 구성
(서버들간의 데이터 불일치가 발생할 경우 과반수의 룰을 적용 하기 때문에 데이터정합성 측면에서
유리)
앙상블을 구성하게 되면 각 ZooKeeper 서버들은 Leader와 follower을 선출 하며 실제 데이터는
Client가 Follower를 통하여 받고, Leader로 전달 그리고 leader가 모든 follower에 전달 하여 모두
동일한 데이터를 갖을 수 있도록 유지
03. Kafka Topic Replication
21. Internal Use Only
Kafka Zookeeper
각 상태정보는 znode 에 key-value 형식으로 저장 하며 아래 그림과 같이 계층적 구조로 정보를 저장
저장되는 데이터를 메모리에 저장 하여 빠른 처리 속도를 나타냄
03. Kafka Topic Replication
22. Internal Use Only
Kafka Broker Controller
임의의 1개의 Broker 가 Controller의 역할을 담당하여 Leader 선출을 담당
Controller 장애 발생 시 다른 Broker가 Controller의 역할을 위임
03. Kafka Topic Replication
23. Internal Use Only
Kafka ISR
Leader와 Follower선출과 데이터의 무결성 처리 위하여 ISR(In Sync Replica) 사용
ISR은 “Replication Group”이라고 할 수 있는데, replication factor 3 으로 설정 되어 있을 경우 특정
1개의 Broker가 Leader, 나머지 Broker가 Follower 선출
여기서 Message가 Leader로 전송이 지속적으로 되는 상태에서 , Follower는 지속 적으로 변경사항을
요청한다. 그리고 Leader 가 변경 사항을 전달하는 Pull방식으로 replication
03. Kafka Topic Replication
25. Internal Use Only
Kafka ISR
follower에서 Leader로 일정 기간 동안 변경사항을 요청 하지
않을 경우 , 해당 follower에 대하여 Leader는 ISR로 유지 하지 않는다.
03. Kafka Topic Replication
Kafka cluster
ISR
Producer
Broker 1
Broker 2
Broker 3
message
Leader
Follower
Follower
Leader변경사항 요청 실패
27. Internal Use Only
Kafka Producer ACKS
Producer가 Broker의 Topic 으로 Message를 보낼 때 응답 받아 처리 하여 Mesaage손실을 방지
04. Kafka Producer ACKS
참조 :Https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-producer-acks/
Broker(Leader)
TopicProducer
acks=0 일 경우 , Producer가 Message를 Leader에게 전송 후 acks을 안 기다림
Broker(Follower)
Topic
acks=0
가장 빠르지만 Message손실 가능성이 가장 높음
28. Internal Use Only
Kafka Producer ACKS
acks=1 일 경우 , Producer가 Message를 Leader에게 전송 후 Leader 가 acks을 보낸 후 Follower에게
Replication 진행 (가장 많이 사용 되며, 기본값)
Producer는 Leader가 잘 보냈는지 확인 할 때까지 기다림
0 설정 보다 Message 손실가능성이 낮지만 acks을 보내고 Replication도중 장애 발생 시
Message손실 가능성 있음
04. Kafka Producer ACKS
참조 :Https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-producer-acks/
Broker(Leader)
TopicProducer
Broker(Follower)
Topic
acks=1
1
3
2
29. Internal Use Only
Kafka Producer ACKS
acks=all(-1) 일 경우 , Producer가 Message를 Leader에게 전송 후 Leader 가 모든 Follower에게
Replication이후 acks을 보냄
Producer는 Leader가 잘 보냈는지 확인 할 때까지 기다림
가장 느리지만, Message 손실 가능성이 가장 낮음
04. Kafka Producer ACKS
참조 :Https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-producer-acks/
Broker(Leader)
TopicProducer
Broker(Follower)
Topic
acks=all(-1)
1
2
3
30. Internal Use Only
Kafka Consumer Group
Producer 는 여러 개의 Partitioning 되어 있는 Topic으로 Message를 전송 하기 때문에 다른 Message
system 보다 Message를 빠르게 처리
하지만 분할 되어 있는 Topic을 가져 올 때는 1개의 Consumer가 처리 한다면 Pull하는 속도가 느림
05. Kafka Consumer Group
Topic
Partition 00
Partition 01
Partition 02
Consumer Group
Consumer 01
31. Internal Use Only
Kafka Consumer Group
Kafka에서는 Cosumer Group 을 통하여 각각 Partition에 대하여 Consumer를 지정 하여 그룹화 함으로
빠른 속도를 보장 함과 함께 데이터 손실을 방지
아래 그림 처럼 3개의 Partion에 대하여 Cosumer Group 에 2개의 consumer가 동작 하여 분산하여
데이터를 수신
04. Kafka Consumer Group
Topic
Partition 00
Partition 01
Partition 02
Consumer Group
Consumer 01
Consumer 02
32. Internal Use Only
Kafka Consumer Group
Consumer Group은 1개의 Partition에 대하여 1개의 Consumer만 지정 해서 보낼 수 있다.
05. Kafka Consumer Group
Topic
Partition 00
Partition 01
Partition 02
Consumer Group
Consumer 01
Consumer 02
Consumer 03
33. Internal Use Only
Kafka Consumer Group
만약 3개의 Partition에 대하여 4개의 Consumer 가 있다면 1개의 Consumer는 대기 하게 되어 낭비
05. Kafka Consumer Group
Topic
Partition 00
Partition 01
Partition 02
Consumer Group
Consumer 01
Consumer 02
Consumer 03
Consumer 04
34. Internal Use Only
Kafka Consumer Group
한개의 topic에 대하여 한 Consumer Group 에서 처리 하던 것을 ,동일한 정보를 다른 쪽에서 사용
하기 위해서 다른 Consumer Group을 추가 하여 동일한 데이터에 대하여 1개의 Message System에서
가져 와서 활용 하는 것도 Kafka의 장점
05. Kafka Consumer Group
Topic
Partition 00
Partition 01
Partition 02
Consumer Group1
Consumer 01
Consumer 02
Consumer 03
Consumer Group2
Consumer 01
Consumer 02
35. Internal Use Only
Kafka Manager
Partition ,Topic 설정 변경,추가,삭제 등 여러가지 작업을 웹 환경에서 제공
JMX 모니터링 제공
06. Kafka Management
36. Internal Use Only
Kafka Monitoring
안정적인 운영을 위하여 JMX을 이용 하여 모니터링
Promethus JMX Exporter으로 수집한 데이터를 Prometheus Server 에서 저장하며,
Grafana 를 이용하여 모니터링
06. Kafka Management
Kafaka
JMX exporter
Kafaka
JMX exporter
Kafaka
JMX exporter
Prometheus
server
Grafana server
37. Internal Use Only
Kafka Monitoring
안정적인 운영을 위하여 JMX을 이용 하여 모니터링
Promethus JMX Exporter으로 수집한 데이터를 Prometheus Server 에서 저장하며,
Grafana 를 이용하여 모니터링
06. Kafka Management
Prometheus Server Grafana
38. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
39. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
AWS(외부)에 있는 서버의 log를 Filebeat로 전송
40. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
Logstash를 이용하여 kafka broker로 전달
41. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
ZK-Web으로 zookeeper 상태 확인
42. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
Kafka Manager를 이용하여topic 생성 및 설정
43. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
Logstash를 kafka topic 에 저장된 메시지
가져온 뒤 파싱 및 elasticsearch 로 저장
44. Internal Use Only
AWS에 있는 jira 로그를 사내 Kafka로 전달 하여 Elastic Stack에서 분석!
07. DEMO
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
Kafaka Broker
Zookeeper
kafka-es-data01
Master/Data Node
kafka-es
Coordinator Node transport 9300
kafka-es-data02
Master/Data Node
kafka-es-data03
Master/Data Node
Logstash
Consumer Node
Rest
Kibana
Dashboard
Filebeat
Logstash
Producer Node
Prometheus
Grafana
server
Prometheus
Prometheus
Kibana를 이용하여 로그 정보 가시화
45. Internal Use Only
참고 문서 & 링크
Kafka: The Definitive Guide (Publisher: O'Reilly Media, Inc.)
카프카, 데이터 플랫폼의 최강자(Publisher: 고승범 , 공용준)
http://kafka.apache.org/documentation/
http://epicdevs.com/