Kafka의 프로듀서(Producer) | 카프카 데이터 복제 (Replication) |컨트롤러와 코디네이터

2024. 11. 27. 18:32DATA/Kafka

반응형

 카프카 프로듀서의 이해

데이터 저장:

  • Kafka의 프로듀서(Producer)는 데이터를 토픽(Topic)에 전송한다. 이때 데이터를 전송받은 카프카 브로커(Broker)는 해당 데이터를 파티션(Partition)에 저장한다.
  • 카프카는 메시지를 파일 시스템에 저장한다. 각 파티션에 대해 하나 이상의 로그 파일이 생성되며, 이 파일들은 디스크에 저장된다.

속도 이슈:

  • Kafka는 데이터를 파일 시스템에 저장하기 때문에, 파일 입출력(File I/O) 속도가 문제될 수 있다.
  • 파일 시스템에서의 속도 이슈를 해결하기 위해 페이지 캐시(Page Cache)를 활용하여 디스크 입출력 속도를 개선한다.

페이지 캐시(Page Cache):

  • 페이지 캐시는 운영 체제(OS)가 관리하는 메모리 영역으로, 파일 입출력 성능을 향상시키는 역할을 한다.
  • Kafka는 파일을 읽을 때 해당 파일의 내용을 페이지 캐시에 저장하고, 동일한 파일을 다시 읽을 경우 캐시에서 메모리 직접 읽기가 이루어진다.
  • 이 과정은 디스크 입출력 성능을 크게 향상시켜, Kafka의 성능을 높이는 데 중요한 역할을 한다.

힙 메모리 크기:

  • 페이지 캐시 덕분에 힙 메모리(heap memory)의 크기를 크게 설정할 필요가 없다. 디스크 I/O가 캐시 메모리에서 처리되므로, Kafka가 데이터를 빠르게 읽고 쓸 수 있도록 돕는다.

카프카 클러스터와 브로커(Broker):

  • 카프카 클러스터는 여러 개의 브로커로 구성된다. 각 브로커는 카프카 클러스터에서 데이터를 저장하고, 관리하며, 다른 브로커와 협력하여 데이터의 일관성을 유지한다.
  • 카프카 컨슈머가 데이터를 요청하면, 카프카 브로커는 요청된 데이터를 해당 파티션에서 찾아 전달한다.

 

 

 

카프카 데이터 복제 (Replication)

Kafka는 데이터를 높은 가용성 및 내구성을 위해 복제(Replication)한다. 복제는 데이터를 여러 브로커(Broker)에 분산 저장하여, 하나의 브로커가 장애를 겪더라도 데이터가 손실되지 않도록 한다.

복제 개념

  • 카프카의 파티션(Partition)은 하나의 리더(Leader)와 여러 팔로워(Follower)로 구성된다.
    • 리더(Leader): 파티션의 주된 데이터 관리자로, 데이터에 대한 모든 읽기 및 쓰기 요청을 처리한다.
    • 팔로워(Follower): 리더의 데이터를 복제하고, 리더가 처리하지 않은 요청을 처리하지 않다. 팔로워는 리더의 파티션 오프셋을 주기적으로 확인하여, 차이가 나면 리더로부터 데이터를 동기화한다.

복제 프로세스

  1. 데이터 쓰기 (Write Process):
    • 프로듀서가 데이터를 카프카 토픽에 전송하면, 리더 브로커가 해당 파티션에 데이터를 저장한다.
    • 리더는 데이터를 먼저 받아서 처리하고, 팔로워에게 복제 작업을 요청한다.
  2. 팔로워 복제 (Follower Replication):
    • 팔로워는 리더의 파티션 오프셋을 계속 확인하여 리더와 동기화된 데이터를 보유한다.
    • 만약 팔로워의 데이터 오프셋이 리더와 차이가 나면, 팔로워는 리더로부터 데이터를 동기화하여 최신 상태를 유지한다.
  3. 복제 팩터 (Replication Factor):
    • 복제 팩터(Replication Factor)는 각 파티션이 몇 개의 브로커에 복제될지를 결정하는 설정이다.
    • 복제 팩터가 2 이상으로 설정되는 것이 권장된다. 이 설정은 장애 발생 시, 하나의 브로커가 실패하더라도 다른 브로커에서 데이터를 복원할 수 있도록 보장한다.

복제 예시

  • Broker 0Broker 1이 있고, 두 브로커는 동일한 토픽(Topic)을 복제한다.
    • Partition 1Partition 2는 각각 리더와 팔로워를 가질 수 있다.
    • , Partition 1의 리더가 Broker 0에 있을 경우, Broker 1Partition 1의 팔로워가 되어 데이터를 복제한다.
    • 리더는 데이터를 처리하고, 팔로워는 이를 복제하여 최신 상태로 유지한다.

장점

  • 데이터의 가용성내구성이 높아진다. 한 브로커가 실패하더라도 다른 브로커에서 복제된 데이터를 이용해 중단 없는 서비스가 가능해진다.
  • 읽기 성능을 향상시킬 수 있다. 팔로워 브로커가 읽기 요청을 처리할 수 있기 때문이다.

참고:

  • Replication Factor가 2 이상이어야 장애 발생 시 데이터 유실을 방지할 수 있다.
  • 복제는 고가용성안정성을 제공하지만, 이로 인해 디스크 용량네트워크 대역폭의 부담이 생길 수 있다.

카프카의 복제 기능을 통해 데이터 손실을 최소화하고 안정적인 데이터 처리가 가능하다.

 

 

 

 

카프카에서의 컨트롤러와 코디네이터 역할

1. 컨트롤러 (Controller)

컨트롤러는 카프카 클러스터 내에서 중요한 역할을 하는 브로커이다. 주요 역할은 클러스터의 브로커 상태를 관리하고, 리더 선출과 같은 작업을 처리하는 것이다.

  • 브로커의 Health 체크: 컨트롤러는 카프카 클러스터에 있는 모든 브로커의 상태를 주기적으로 모니터링하여, 문제가 발생한 브로커를 감지한다.
  • Failover 과정: 만약 컨트롤러 브로커가 장애를 겪으면, 클러스터 내에서 다른 브로커가 새로운 컨트롤러 역할을 맡다. 이 과정을 failover라고 하며, 자동으로 수행된다.
  • Leader 선정: 각 파티션에는 리더가 하나 있으며, 이 리더는 데이터를 읽고 쓰는 역할을 한다. 컨트롤러는 파티션에 대한 리더 선출을 담당한다. , 리더 브로커가 장애가 발생하면 컨트롤러가 새로운 리더를 자동으로 선출하여 데이터의 무결성을 보장한다.

2. 코디네이터 (Coordinator)

코디네이터는 카프카 클러스터에서 컨슈머 그룹의 상태를 관리하고, 각 컨슈머가 적절히 데이터를 소비할 수 있도록 파티션과 컨슈머를 매칭하는 역할을 한다.

  • 컨슈머 그룹 상태 체크: 카프카에서는 여러 컨슈머들이 하나의 컨슈머 그룹으로 묶여 데이터를 병렬 처리한다. 코디네이터는 각 컨슈머 그룹의 상태를 체크하고, 필요한 경우 리밸런싱을 진행한다.
  • 파티션과 컨슈머의 매칭: 각 컨슈머 그룹은 여러 파티션에 할당된 데이터를 소비한다. 코디네이터는 각 파티션이 어떤 컨슈머에 의해 소비될지를 결정한다.
  • 리밸런싱: 리밸런싱은 컨슈머 그룹의 구성원이 바뀌거나 파티션 수가 변동될 때, 파티션이 다시 할당되는 과정이다. , 컨슈머가 컨슈머 그룹에서 빠지면, 해당 컨슈머가 맡고 있던 파티션은 다른 컨슈머에게 할당된다. 이를 통해 파티션의 고르게 분배가 이루어진다.

컨트롤러와 코디네이터의 차이점

  • 컨트롤러는 주로 브로커 관리리더 선출 등 클러스터 수준의 메타데이터 관리 역할을 하며, 클러스터의 안정성 유지를 담당한다.
  • 코디네이터컨슈머 그룹의 파티션 할당과 상태 관리, 리밸런싱 등을 통해 데이터 소비의 균형을 맞추는 역할을 한다.

이러한 역할 분담을 통해 카프카는 분산 시스템에서의 데이터 처리 및 소비를 효율적으로 관리하며, 높은 가용성과 안정성을 제공한다.

반응형

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

ISR (In Sync Replica)  (0) 2024.11.27
카프카에서 세그먼트(Segment)와 레코드(Record)  (0) 2024.11.27
카프카의 주요 개념: 이벤트, 스트림, 토픽  (0) 2024.11.27
Zookeeper 및 부분 실패(Partial Failure)  (0) 2024.11.27
Kafka  (1) 2024.11.27