Kafka 에서 Producer 는 Topic 에 메시지를 보내고 하나의 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 |