본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Kafka_Confluent

[Kafka] Topic

by iamlucia 2021. 5. 19.

📌 kafka 및 Confluent 를 공부하며 정리하는 글 

1. Topic (토픽) 이란?

토픽은 데이터 스트림과 비슷한 개념이다.

데이터베이스의 테이블과 비슷하다. (제약사항이 없는!)

카프카에서 원하는 만큼의 토픽을 만들 수 있고, 각 토픽은 이름으로 구별한다.

 

2. 토픽과 Partition (파티션), Offset(오프셋)

  • 토픽은 파티션으로 쪼개진다!

각 파티션은 NUMBER를 가지는데(partition0, partition 1, 이렇게), 각 파티션은 순서를 갖게 된다.

하나의 파티션 안의 각 메세지는 0부터 순차적으로 증가하는 id(offset)를 가진다.

 

🔎 Topic Example: delivery_gps
여러 배달 오토바이가 배달 중인 비즈니스에서 카프카를 사용한다고 가정해보자.
각 배달 오토바이의 GPS 위치가 카프카로 보고되는데, 해당 위치 정보를 delivery_gps라는 topic에 담는다.
각 배달기사는 카프카에 20초마다 데이터(메시지)를 보내는데, 각 메세지는 오토바이 ID 및 위치(위도 및 경도)정보를 나타낸다.
토픽으로부터 Location dashboard 및 Notification Service 등의 어플리케이션을 개발할 수 있다.

 

  • Offset은 특정 partition 내에서만 의미를 가진다: partition 0의 offset 3은 partition1의 offset 3과 동일한 데이터를 나타내지 않는다.
  • Partition 내에서만 Offset의 순서가 보장된다: partition1의 offset 2 와  partition2 의 offset 2 중 어떤 offset 2의 메세지가 더 먼저 생성(write)되었는지는 알 수 없다

  • 데이터는 정해진 시간동안 보관된다: 기본적으로 일주일만 보관된다(Data retention Policy: 전체적으로 적용하거나 개별 topic 별로 적용 가능)

  • 데이터는 segment 단위로 제거되는데, 일단 파티션에 데이터가 write 되면, 이는 절대 변할 수 없다.
  • key의 값이 null인 경우, 데이터는 파티션에 랜덤하게 할당된다

 

3. Broker

Kafka 클러스터는 다수의 broker(server) 로 구성된다. 

각 broker는 ID(integer)로 식별 가능하다.

각 broker는 특정 topic partition을 담고 있다.

Kafka가 자동으로 topic을 Broker에 분배하여 할당한다.

정확히 말하면 topic이 쪼개져 있는 partition들을 여러 Broker에 걸쳐 할당한다. 

브로커 클러스터가 잘 구성되어 있다면  이중 하나의 broker(bootstrap broker)에만 접속해도 전체 cluster에 접속 가능하다. 

 

💡 broker는 최소 3개 부터 구성하는 것이 권장되며, 기업의 크기에 따라 100개 이상의 broker를 가질 수 있다.

 

1) Topic Replication Factor

Topic은 최소 1 이상의 Replication Factor를 가지게 되는데, 보통 2와 3사이의 값을 가진다.

총 partitions의 갯수는 다음과 같다: Partitions num X Replication Factor

broker가 down 되면, 또 다른 broker가 그 데이터를 담당하는데, 이때 replicated된 데이터를 통해 담당하게 된다.  

 

아래 그림을 통해 rf 값이 2로 설정되어 있고 파티션이 3개인 토픽을 확인할 수 있다. 

rf가 2이기 때문에 하나의 원본 파티션과 그 파티션의 복제본이 다른 브로커에 할당되어 있다. 

이때 102브로커에 장애가 생겨도 102가 담고 있던 토픽은 각각 101과 103에도 할당되어 있어 지속적인 처리가 가능하다. 

 

Leader for a Partition

원본 파티션과 복제본 파티션이 펼쳐진 브로커 클러스터 환경에서 '리더'가 존재한다.

특정 partition에 대해 leader인 브로커는 해당 파티션에 대한 data 처리과정을 담당한다.(receive & serve) 

다른 follower broker는 data를 동기화할 뿐이다. (apache 2.5 버전부터는, follower로부터 read 가능)

 

즉, 각 파티션마다 leader와 다수의 ISR 레플리카 그룹(follower)이 할당된다.

토픽 파티션에 대한 leader 선정 과정은 백그라운드에서 이루어지는데,

zookeeper에 의해 그 leader 와 ISR 그룹이 결정된다.

'자기발전소 > # Kafka_Confluent' 카테고리의 다른 글

[Kafka] Producer 관련 주요 옵션  (0) 2021.05.29
[Kafka] Broker & Zookeeper  (0) 2021.05.19
[Kafka] Consumer  (0) 2021.05.19
[Kafka] Producer  (0) 2021.05.19
[Kafka] Apache Kafka란  (0) 2021.05.19