minOS

producer - brokers - consumer 관계도 및 Kafka Broker Discovery와 Kafka 파티션 복제(Replication) 개념 본문

TIL/Kafka

producer - brokers - consumer 관계도 및 Kafka Broker Discovery와 Kafka 파티션 복제(Replication) 개념

minOE 2025. 3. 9. 05:15
728x90

예시 )

Produecr A - 토픽 3개  발행 ,

producer B 토픽 2개 발행,

broker 3개 존재 ( 토픽과 파티션 관리),

consumer 2개 존재(토픽 구독)

Producer A
   ├──> Topic 1 ───> Partition 1 (Broker 1)
   │                  ├── Consumer 1
   │                  ├── Consumer 2
   ├──> Topic 2 ───> Partition 2 (Broker 2)
   │                  ├── Consumer 1
   ├──> Topic 3 ───> Partition 3 (Broker 3)
                      ├── Consumer 1

Producer B
   ├──> Topic 4 ───> Partition 4 (Broker 1)
   │                  ├── Consumer 2
   ├──> Topic 5 ───> Partition 5 (Broker 2)
                      ├── Consumer 2

Brokers
   ├── Broker 1 (Partitions: 1, 4)
   ├── Broker 2 (Partitions: 2, 5)
   ├── Broker 3 (Partitions: 3)

Consumers
   ├── Consumer 1 (Reads from Topics 1, 2, 3)
   ├── Consumer 2 (Reads from Topics 4, 5)

 

  • Producer A는 3개의 Topic을 생성하고, Producer B는 2개의 Topic을 생성
  • Broker 3개가 파티션을 분산 저장하며 관리(순서 상관 없음)
  • Consumer 2개가 특정 Topic을 구독하여 데이터를 가져감

 

 

 

Kafka Broker Discovery 설명

Kafka에서 클라이언트(Kafka Producer 또는 Consumer)가 브로커와 연결될 때, 먼저 Broker Discovery(브로커 탐색) 과정을 거치게 된다. 이 과정은 클러스터 내의 브로커 정보를 얻고, 올바른 브로커와 통신하기 위한 필수적인 단계이다.

Kafka 클러스터에는 여러 개의 Broker(브로커) 가 있으며, 클라이언트는 특정 브로커 하나와만 연결되는 것이 아니라 클러스터 전체에서 데이터를 주고받아야 한다. 따라서 클라이언트는 처음에 Bootstrap Broker(부트스트랩 브로커) 라는 초기 진입점을 통해 클러스터의 전체 정보를 얻는다.



Kafka Client와 Broker(부트스트랩) 연결 과정

1. 클라이언트가 부트스트랩 서버(Broker)와 연결

Kafka Client(Producer 또는 Consumer)는 bootstrap.servers 설정을 사용하여 초기 접속할 브로커 목록을 정의한다. 이때, 클라이언트는 반드시 클러스터의 모든 브로커 정보를 몰라도 되며, 단 몇 개의 브로커 주소만 알고 있으면 된다. 이 설정을 통해 클라이언트는 지정된 브로커 중 하나에 먼저 접속을 시도한다.

2. 메타데이터 요청 (Metadata Request)

클라이언트가 브로커에 접속하면 메타데이터 요청(Metadata Request) 을 보낸다. 이 요청에는 클러스터 내 다른 브로커 목록, 각 토픽의 리더 브로커 및 파티션 정보가 포함된다.

3. 메타데이터 응답 (Metadata Response)

부트스트랩 브로커는 클러스터의 최신 정보를 클라이언트에게 반환한다. 여기에는: 클러스터 내 전체 브로커 목록 각 토픽과 해당 파티션의 리더 브로커 정보 각 브로커의 주소 및 접속 가능한 포트 정보 등이 포함된다.

4. 클라이언트가 적절한 브로커에 연결

Producer는 메시지를 보낼 적절한 리더 브로커 에 연결하여 데이터를 전송한다. Consumer는 구독한 토픽의 리더 브로커 와 연결하여 데이터를 읽어온다. 이후, 필요하면 자동으로 다른 브로커로 이동하거나 재연결한다.


Kafka Broker Discovery 과정의 구조 

Kafka Client (Producer/Consumer)
   │
   ▼
Bootstrap Broker (초기 접속 브로커)
   │
   ├──> 메타데이터 요청
   │
   ▼
Bootstrap Broker 응답 (클러스터 정보 반환)
   │
   ├──> Broker 1 (리더)
   ├──> Broker 2
   ├──> Broker 3
   │
   ▼
Kafka Client (적절한 Broker로 연결)​


 

 

Kafka 파티션 복제(Replication) 개념

Kafka에서 파티션 복제(Replication) 는 데이터를 안정적으로 유지하고 장애 발생 시 복구할 수 있도록 하는 중요한 기능이다.

📌 왜 파티션을 복제하는가?

장애 대응 (Fault Tolerance)
- 특정 브로커가 다운되더라도 다른 브로커에 복제본(Replica)이 존재하면 데이터 손실 없이 복구할 수 있다.
고가용성 (High Availability)
- 하나의 브로커에서 장애가 발생해도 다른 브로커에서 리더를 선출하여 계속 데이터를 처리할 수 있다.
데이터 일관성 유지 (Consistency)
- Kafka의 ISR(In-Sync Replicas) 메커니즘을 통해 리더와 팔로워 복제본들이 동기화 상태를 유지하도록 보장한다.






Kafka 파티션 복제 구조 (브로커 3개, 파티션 2개 ,복제 계수 2 예시)

Partition 0
Broker 1이 리더(⭐) Broker 2가 팔로워(★) Broker 3에는 존재하지 않음 (복제 안됨)
Partition 1
Broker 2가 리더(⭐) Broker 3이 팔로워(★) Broker 1에는 존재하지 않음 (복제 안됨)


Broker 1        Broker 2        Broker 3
   │               │               │
   │               │               │
⭐ Partition 0  ─── ★ Partition 0      (복제 안됨)
   │               │               │
   │               │               │
   │               ⭐ Partition 1  ─── ★ Partition 1​



📌 설명

리더(⭐): Producer는 데이터를 오직 리더에게만 기록하고, Consumer는 리더에서 데이터를 읽는다. 팔로워(★): 리더의 데이터를 복제(Replication)하여 유지하는 브로커들. ISR (In-Sync Replicas): 리더와 동기화된 상태의 복제본(팔로워) 목록.

이 구조에서는 Broker 1이 Partition 0의 리더, Broker 2가 Partition 1의 리더 역할을 하며, 나머지 브로커들이 복제본을 유지한다.


📌 Kafka 복제 계수 설정 의미

복제 계수 = 2 각 파티션은 리더(⭐) + 팔로워(★) 1개 를 가짐.
Partition 1의 팔로워를 Broker 3에 배치하여 부하를 분산 기존에는 Broker 1, 2만 데이터를 저장했지만, 이제 Broker 3도 일부 데이터를 보관.

Broker 2 이 다운되더라도 데이터는 유지됨.
Broker 1이 다운되면 Partition 0의 리더를 잃음 → Kafka가 새로운 리더를 자동 선출

728x90

'TIL > Kafka' 카테고리의 다른 글

Zookeeper 없이 카프카 시작하기  (2) 2025.03.10