본문 바로가기

Kafka

[Kafka] Partition & Replication (3)

Kafka 에서 ProducerTopic 에 메시지를 보내고 하나의 Topic 은 한개 이상의 Partition 으로 나뉘게 된다.

이는 Topic 을 생성하는 시점에 명시할 수 있다.

 

 

 

Partition

  • Topic 을 분할한 단위
  • Partition 이 여러개일 경우 Producer 가 전송한 메시지 순서는 보장되지 않는다.
  • 하지만 Partition 간의 메시지 순서는 보장된다.
  • kafka 메시지에 key를 할당하고, 이 key에 따라 파티션이 선택된다.
    • kafka는 key가 설정되지 않은경우, 메시지는 reound robin 방식으로 파티션을 선택하여 메시지가 전달
    • key가 있다면 key값을 hashing하고 해싱 결과를 이용하여 파티션 선택
    • 만약 특정 메시지의 키에 따라 들어온 순서가 중요한 서비스라면, 키를 반드시 할당하고, 이들이 특정 파티션으로 분배되도록 지정해주는 용도로 사용할 수 있다.

하나의 Consumer 가 세개의 Partition 을 모두 구독할 때, 메시지는 원래 전송된 순서대로 오지 않을 확률이 높다. consumer 가 브로커에서 하나씩 돌아가며 메시지를 가져온다고 해도 말이다.

하지만 Partition 간의 메시지 순서는 보장이 된다. consumer 가 각 Partition 에서 데이터를 불러올 때 도착하는 세그먼트 데이터 순서는 아래와 같다.

 

Partition 0 Partition 1 Partition 2
1 - 2 - 7 - 8 3 - 5 4 - 6 - 9

 

 

 

Replication

분할된 Partition 을 복제하여 클러스터 내 브로커들에 분산시키는 동작을 Replication 이라 한다.

메인 허브인 카프카 클러스터가 정상적인 동작을 하지 못할 경우를 대비해 초기 설계 단계부터 안정적인 서비스를 운영할 수 있도록 Replication 처리를 한다. N-1 개의 브로커에서 장애가 발생해도 Replica 기반으로 안정적인 서비스를 제공하여 데이터 유실을 방지하고 유연성을 제공한다.

  • 토픽 생성 시 아래와 같이 replicaion factor 라는 옵션을 설정
  • 일반적으로 3개의 리플리케이션을 권장
> --create --topic peter-test01 --partitions 1 --replication-factor 3

[출력]
Create topic peter-test01

 

 

Replication Group

Topic 은 1개 이상의 Partition 으로 구성

  • Topic = { Partition1, … , PartitionN | N ≥1}

각 Partition 은 leader replica 1개와 follower replica 0개 이상으로 구성된다.

  • Partition = { leader_replica1, follower_replica0, … follower_replicaN | N ≥ 0 }

 

 

ISR(In Sync Replica)

생성된 Replication 은 Leader 와 Follower 로 나뉘어 일종의 Replication Group 을 형성하여 관리된다.

  • Leader replica 와 제대로 동기화가 이뤄진 Follower replica 로 구성
  • ISR내의 모든 follower들은 누구라도 leader가 될 수 있다.
 💡 ISR 을 따로 그룹화 한 이유?
1. Follower 역시 불완전한 상태로 존재할 수 있다.
2. 불완전한 Follower 가 새로운 Leader 가 된다면 데이터 정합성이나 메시지 손실 같은 치명적인 문제가 발생할 수 있다.

 

 

Leader

리플리케이션중에서 하나로 선정되며 각 파티션의 Leader만 모든 읽기와 쓰기 권한을 갖고 있다.

  • Producer 는 리더들에게 메시지를 전송하며 Consumer도 리더들로부터 메시지를 가져온다.
  • 만약 특정 Follower가 특정 주기의 시간만큼 복제요청을 진행하지 않는 경우
    → ISR 그룹에서 추방하며 해당 Follower는 Leader 자격 박탈
    → Replication 동작에 문제가 발생했다고 판단

 

 

Follower

Follower replica 는 Leader replica 의 데이터를 복제하여 동일하게 유지한다.

  • Follower들은 Leader가 이슈가 있을 경우를 대비해 언제든지 새로운 Leader가 될 준비를 한다.
  • 지속적으로 새로운 메시지를 확인하고 새로운 메시지가 있으면 Leader로부터 메시지를 복제한다.
  • Leader 가 중단되는 경우 Follower 중 하나가 Partition 의 새로운 Leader replica 로 선출
  • 새로운 Leader replica 선출해야 하는 상황에서 제대로 데이터를 복제하지 못한 replica 가 존재할 경우
    → 나머지 follower replica 중에서 Leader replica 선출

'Kafka' 카테고리의 다른 글

[Kafka] Listener 기본 설정 (6)  (0) 2024.07.26
[Kafka] Spring Kafka commit (5)  (0) 2024.07.17
[Kafka] commit 이해하기 (4)  (0) 2024.07.17
[Kafka] kafka 내부 구조 (2)  (0) 2024.07.12
[Kafka] 탄생 배경 (1)  (0) 2024.07.08