목차

  1. Apache Kafka
  2. Kafka Architecture
  3. Kafka 데이터 쓰기
  4. Kafka 데이터 읽기

 


Apache Kafka

LinkedIn에서 최초로 출발하여 정식 Apache Opensource로 등록된 분산 이벤트 스트리밍 플랫폼

  • Producer와 Consumer의 분리 (Pub / Sub 방식)
  • 멀티 Producer, 멀티 Consumer
  • Disk에 메시지 저장
  • 용이한 확장성
  • 분산 처리, 배치 처리 등 다양한 기법을 사용한 높은 성능

 


Kafka Architecture

Broker: Kafka Application이 설치되어 있는 서버 또는 노드

Producer: Broker에 data를 write 하는 역할을 수행

Consumer: Broker에서 data를 read 하는 역할을 수행, Group으로 구성

Zookeeper: Kafka(분산 애플리케이션)를 위한 코디네이션 시스템

 

 


Kafka 데이터 쓰기

 

 

Topic: Producer와 Consumer들이 Kafka로 보낸 자신들의 메시지를 구분하기 위한 카테고리

Partition: 병렬 처리가 가능하도록 Topic이 나뉘는 단위.

Offset: 각 Partition마다 메시지가 저장되는 위치

 

Kafka에서는 데이터를 구분하기 위한 단위로 Topic이라는 용어를 사용하며 이곳에 data를 저장합니다.

Topic 이름은 249자 미만의 영문, 숫자, 온점(.), 밑줄(_), 대시(-)를 조합하여 자유롭게 만들 수 있으므로 여러 서비스에서 공통으로 카프카 클러스터 하나를 사용하게 된다면, 각자 형식에 맞춰 Topic 이름을 구분해주는 것이 좋습니다.

 

각 Topic은 1개 이상의 Partition으로 나뉘며 Producer가 보낸 메시지를 Partition에 분산하여 저장합니다.

Partitioin마다 메시지가 저장되는 위치를 Offset이라고 하며, Offset은 Partition 내에서 유일하고 순차적으로 증가하는 숫자(64bit 정수) 형태로 되어 있습니다.

Kafka에서는 Offset을 이용해 Partition 내의 메시지 순서를 보장합니다.

 

 


Kafka 데이터 읽기

 

Consumer는 하나 이상의 토픽에서 메시지들을 가져올 수 있으며, 메시지가 Topic에 write 되면 자동으로 해당 메시지를 가져옵니다. 

Consumer들은 Offset 순서대로만 data를 가져갈 수 있습니다.

Consumer들은 만일의 상황에 대비하여 자신들의 Offset 정보(다음에 read 할 offset 번호)를 특수한 Topic(__consumer_offsets)에 저장합니다.

Consumer Group은 1개 이상의 Consumer들로 구성되며 고유한 ID를 가집니다.

Consumer Group의 Consumer들은 Partition단위로 각 Topic의 data를 병렬로 분산하여 처리할 수 있습니다.