Kafka

2020. 5. 8. 18:18기타

반응형

Apache Kafka란

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

Kafka 용어

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

Kafka Cluster에 적재된 데이터를 사용하는 역할을 하는 애플리케이션

  • Consumer Group: Consumeer의 집합을 구성하는 단위.

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의 데이터를 처리할 수 없습니다.

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

반응형

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

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