Kafka

2020. 5. 8. 18:18기타

728x90

1. Apache Kafka란

 Apache Kafka란 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템입니다. Kafka는 Pub/Sub 모델을 기반으로 동작하며 크게 producer, consumer, broker로 구성됩니다. 그림으로 표현하면 아래와 같이 나타납니다.

  • Producer: 데이터를 발생시키고 Kafka Cluster에 적재하는 프로세스
  • Kafka Cluster: 카프카 서버로 이루어진 클러스터
    • Broker: 카프카 서버
    • Zookeeper: 분산 코디네이션 시스템으로, Kafka Broker를 하나의 Cluser로 코디네이팅하는 역할을 하며, Cluster의 Leader를 발탁하는 방식을 제공
    • Topic: Kafka Cluster에 데이터를 관리할 때 그 기준이 되는 개념. Topic은 Cluster에서 여러 개 만들 수 있으며, 하나의 Topic은 1개 이상의 Partition으로 구성되어 있음
    • Partition: 각 Topic 당 데이터를 분산 처리하는 단위. Kafka에서는 Topic 안에 Partition을 나누어 그 수대로 데이터를 분산 처리.
    • Leader: 모든 읽기, 쓰기 연산을 담당
    • Follwer: 단순히 리더의 데이터를 복사하는 역할
  • Consumer Group: Consumeer의 집합을 구성하는 단위.

2. Apache Kafka Partition Read & Write


 Kafka에서의 read, write는 Cluster 내의 Leader에만 적용됩니다. 하늘색으로 칠해진 Partition들은 Leader이며 이 Partiton들에게 Producer가 write 연산을 진행합니다. 그리고 Leader에 연산이 진행되고 나면, 업데이트된 데이터는 Follwer들에게로 복사됩니다.

 Kafka는 Queue 형태로 데이터를 디스크에 저장합니다. 이 때 Partition들은 각각의 데이터들의 순차적인 집합인 Offset으로 구성되어 있습니다. Consumer Group의 각 Consumer들은 Partition의 Offset을 기준으로 데이터를 순차적으로 처리하게 됩니다. 참고로, 같은 Consumer Group내에 있는 Consumer는 같은 Partition의 데이터를 처리할 수 없습니다.

3. Apache Kafka의 특징

  • 분산 시스템을 기본으로 설계되었기 때문에, 분산 및 복제 구성이 쉬움
  • TCP 기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드를 감소시킴
  • 다수의 메시지를 Batch 형태로 Broker에게 한번에 전달할 수 있어 TCP/IP 라운드 트립 횟수가 줄어듬
  • 메시지를 파일 시스템에 저장
    • 파일 시스템에 메시지를 저장하기 때문에 데이터의 영속성이 보장됨
    • 메모리에 저장하는 기존 시스템은 메시지가 많을수록 성능이 크게 감소하였으나, Kafka는 파일 시스템에 저장하기 때문에 성능이 크게 감소하지 않음
    • 기존 시스템은 처리된 메시지를 바로 삭제하는 반면에, Kafka는 파일 시스템에 두었다가 수명이 지나면 삭제하도록 처리
  • 기존의 메시징 시스템은 broker가 consumer에게 메시지를 push 하는 방식인데 반해, Kafka는 consumer가 broker로부터 직접 메시지를 가져가는 pull 방식으로 동작.
    • consumer는 자신의 처리 능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있음
    • push 방식에서 broker는 각 consumer가 어떤 메시지를 처리해야 하는지 계산하고 어떤 메시지를 처리 중인지 트래킹했지만, Kafka는 직접 필요한 메시지를 broker로부터 pull 하므로 broker의 consumer와 메시지 관리에 대한 부담이 경감됨
    • pull 방식으로 메시지를 처리하기 때문에, 메시지를 쌓아두었다가 주기적으로 처리하는 batch consumer의 구현이 가능

참조: https://engkimbs.tistory.com/691

728x90

'기타' 카테고리의 다른 글

Vue.js  (0) 2020.06.05
Rabbit MQ  (0) 2020.05.13
Message Queue  (0) 2020.05.08
Pub/Sub 모델  (0) 2020.05.07
Git Merge와 Rebase  (0) 2020.04.26