본문 바로가기
Apache Kafka

Zookeeper, KRaft (Kafka Raft)

by xogns93 2024. 11. 7.

Zookeeper는 Apache Kafka와 같은 분산 시스템에서 클러스터의 상태를 관리하고, 노드 간의 동기화와 메타데이터 저장을 담당하는 분산 코디네이션 시스템입니다. Kafka에서는 Zookeeper가 중요한 역할을 수행하여 안정적이고 일관된 상태를 유지하게 돕습니다.

Zookeeper의 주요 기능

  1. 메타데이터 저장
    • Kafka의 구성, 브로커 목록, 토픽, 파티션 등과 같은 메타데이터 정보를 저장합니다.
    • Kafka 브로커들이 클러스터 내에서 서로 어떤 상태인지, 어떤 브로커가 리더 역할을 하는지 등의 정보를 기록하고 관리합니다.
  2. 리더 선출 관리
    • Kafka는 각 파티션에 대해 리더와 팔로워로 구성되어 있습니다. Zookeeper는 장애가 발생했을 때 새로운 리더를 선출하고 관리합니다.
    • 예를 들어, 특정 브로커가 다운되면 Zookeeper는 자동으로 다른 브로커를 리더로 지정하여 데이터의 가용성을 유지합니다.
  3. 컨슈머 그룹 오프셋 관리
    • Kafka는 메시지를 소비하는 위치인 오프셋을 관리합니다.
    • Kafka 컨슈머 그룹은 각 오프셋을 통해 어느 지점에서부터 데이터를 읽어야 하는지를 결정하며, Zookeeper는 이 오프셋 정보를 관리하여 데이터 손실을 방지합니다.
  4. 클러스터 관리 및 노드 모니터링
    • Zookeeper는 클러스터의 각 노드(브로커) 상태를 지속적으로 모니터링합니다.
    • 새로운 노드가 추가되거나 삭제될 때 Zookeeper는 이러한 변경 사항을 Kafka 브로커에 즉시 전달하여 클러스터의 일관성을 유지합니다.
  5. 장애 감지 및 복구
    • Zookeeper는 클러스터 내에서 브로커의 상태를 지속적으로 확인하며, 장애 발생 시 이를 즉시 감지하고 알립니다.
    • 장애가 발생한 브로커의 역할을 다른 브로커가 대신하도록 구성하여 고가용성을 유지합니다.

Kafka와 Zookeeper의 통합 구조

Kafka는 Zookeeper와의 통신을 통해 클러스터의 상태를 확인하고, 데이터의 일관성을 유지합니다. 구체적으로, 다음과 같은 방식으로 통합됩니다:

  • 브로커와 Zookeeper: Kafka 브로커는 주기적으로 Zookeeper에 자신의 상태를 보고합니다. 브로커가 추가되거나 제거될 때, Zookeeper는 이를 인지하여 클러스터 구성을 조정합니다.
  • 컨슈머와 Zookeeper: Zookeeper는 컨슈머의 오프셋을 추적하고 관리합니다. 이를 통해 컨슈머가 안정적으로 데이터를 소비하고, 데이터 손실 없이 메시지 처리를 진행할 수 있도록 돕습니다.

Zookeeper의 단점과 대체 방안

Zookeeper는 Kafka의 안정성을 크게 높여주지만 몇 가지 단점도 존재합니다.

  • 성능 저하: Zookeeper에 대한 의존성이 높아지면 Zookeeper의 부하가 커져 클러스터 전체의 성능이 저하될 수 있습니다.
  • 단일 장애점(Single Point of Failure): Zookeeper 노드에 장애가 발생하면 Kafka 클러스터에 영향을 미칠 수 있습니다. 이를 해결하기 위해 Zookeeper도 고가용성을 위해 복제 및 클러스터로 구성합니다.

 


 

KRaft (Kafka Raft) 모드는 Apache Kafka에서 Zookeeper 의존성을 없애고 Kafka 자체에서 모든 메타데이터 관리와 클러스터 코디네이션을 수행할 수 있게 하는 새로운 모드입니다. KRaft 모드는 Kafka 2.8에서 실험적으로 도입되었으며, Kafka 2.8 이후의 버전에서 Zookeeper 없이 Kafka 클러스터를 운영할 수 있는 구조를 제공합니다.

KRaft 모드의 주요 개념과 장점

  1. Raft Consensus 알고리즘 기반
    • KRaft 모드는 분산 시스템에서 리더를 선출하고, 데이터의 일관성과 가용성을 유지하는 Raft Consensus 알고리즘을 사용합니다.
    • 이 알고리즘을 통해 Kafka가 직접 메타데이터(브로커 목록, 토픽, 파티션 상태 등)를 관리하고, 장애 발생 시 리더를 선출합니다.
  2. Zookeeper 의존성 제거
    • KRaft 모드에서는 Kafka 클러스터 내에서 모든 메타데이터 관리와 클러스터 운영을 Kafka 자체에서 처리합니다.
    • 이로 인해 Zookeeper를 별도로 운영할 필요가 없으며, 클러스터 관리가 단순해지고 유지보수 비용이 감소합니다.
  3. 메타데이터 컨트롤러의 도입
    • KRaft 모드에서는 메타데이터 관리와 클러스터 코디네이션을 위한 메타데이터 컨트롤러를 도입했습니다.
    • 메타데이터 컨트롤러는 Kafka 클러스터에서 메타데이터를 관리하는 리더 역할을 하며, 클러스터 구성 변경(예: 브로커 추가/제거, 파티션 이동 등)을 조율합니다.
  4. 안정성과 성능 향상
    • Zookeeper가 없이도 높은 일관성과 가용성을 유지할 수 있도록 설계되어 있습니다.
    • KRaft 모드에서는 Kafka가 직접 메타데이터를 관리하고 복제하기 때문에, 불필요한 통신 오버헤드가 줄어들어 성능이 향상됩니다.

KRaft 모드의 구성 요소

  • 메타데이터 리더/팔로워: KRaft 모드에서는 메타데이터를 저장하는 브로커가 리더와 팔로워로 나뉩니다. 리더는 클러스터의 메타데이터 상태를 관리하며, 팔로워는 리더의 메타데이터를 복제하여 일관성을 유지합니다.
  • Raft Replication: Raft 알고리즘에 따라 메타데이터 리더가 변경 사항을 팔로워에게 복제하여 장애 상황에서도 데이터를 안전하게 복구할 수 있습니다.

KRaft 모드의 주요 장점

  • 단순화된 운영: Zookeeper가 필요하지 않기 때문에 Kafka 클러스터의 운영이 더 간단해졌습니다.
  • 확장성: Zookeeper에 비해 더 많은 노드를 포함할 수 있도록 확장성이 개선되었습니다.
  • 성능 개선: KRaft 모드는 메타데이터 관리의 통합으로 인해 더 낮은 지연 시간과 높은 처리량을 제공할 수 있습니다.

KRaft 모드의 제한 사항

KRaft 모드는 기존 Zookeeper 기반 Kafka와는 호환되지 않기 때문에 한 클러스터에서 Zookeeper 기반과 KRaft 기반을 함께 사용할 수는 없습니다. 또한 KRaft 모드를 사용하려면 최신 Kafka 버전을 사용해야 하며, 초기에는 Zookeeper와 같은 모든 기능을 완벽히 제공하지 않을 수도 있습니다.

요약

KRaft 모드는 Kafka가 Zookeeper 없이도 독립적으로 클러스터의 메타데이터를 관리할 수 있게 하는 새로운 아키텍처로, 단순화된 운영, 확장성, 성능 등의 이점을 제공합니다. KRaft 모드는 Kafka 클러스터를 더 효율적이고 안정적으로 관리할 수 있게 하여, Kafka의 차세대 클러스터 관리 방안으로 자리잡고 있습니다.

'Apache Kafka' 카테고리의 다른 글

Apache kafka  (0) 2024.11.08
Activemq artemis 관련  (0) 2024.11.08
Apache Kafka와 ActiveMQ  (0) 2024.11.08
Apache Kafka (아파치 카프카)  (1) 2024.11.07