Kafka는 어떻게 고가용성을 확보하고 있을까? (feat. 노드, 브로커, 컨트롤러, 클러스터, 래플리케이션)

2026. 2. 4. 22:13·🌊 Data Engineering
728x90

 

Kafka를 사용하는 가장 큰 이유는 대규모의 데이터를 안정적으로 처리 하기 위해서입니다. Kafka는 분산 메세징 시스템을 통해 고가용성을 (시스템이 장애 상황에도 데이터 처리를 멈추지 않기 위함, High Availability / HA) 확보합니다. 오늘은 Kafka가 어떤 구조를 통해서 고가용성을 보장하는지, 그리고 운영 환영에서 고려해야 하는 설정 포인트를 중심으로 정리해보겠습니다. 

 

 

 

오늘도 실전에서 바로 써먹는 Kafka 입문과 GPT, Gemini와 함께합니다.

 

카프카 서버에 대한 장애는 아래 처럼 다양한 경우가 있을 수 있습니다.

 

안 만나는 것이 최선이겠지만 대비를 해놔야겠지요!

 

  • 특정 Kafka 서버가 장애로 내려간 경우
  • 네트워크 단절이나 일시적인 장애가 발생한 경우
  • 일부 Consumer 또는 Producer가 비정상 종료된 경우

 

이런 케이스들의 장애에 대응하기 위해 카프카는 다음과 같은 구조로 구성합니다. 

 

 

 

GPT가 만들어준 카프카 클러스터의 모습이랍니

  • 노드 (Node)
    • 카프카가 설치된 물리적 또는 가상 서버
    • 장애가 나도 전체가 죽게하지 않기 위하여 최소 3대의 Kafka 서버(노드)를 두고 구성하는 경우가 많음
  • 클러스터 (Cluster)
    • 여러 대의 서버가 유기적으로 연결되어 하나의 시스템처럼 동작하는 것 (여러 노드들의 집합)
    • 장애 시 시스템 전체가 중단없이 작동할 수 있도록 함
  • 브로커 (broker)
    • 메세지를 저장하고 클라이언트의 요청을 처리하는 역할 (직원)
    • 기본적으로 9092 포트에서 실행 
  • 컨트롤러 (Controller)
    • 브로커들간의 연동과 전반적인 클러스터의 상태를 총괄하는 역할 (총관리자)
    • 기본적으로 9093 포트에서 실행 
  • 레플리케이션 (Replication)
    • 레플리케이션을 설정하면 파티션을 다른 노드에도 복사해서 저장하여 장애에 대비하는 보험 역
    • 리더 파티션 (원본) - 팔로워 파티션 (복제본)으로 구분되어 구성되며, 리더 파티션은 프로듀서나 컨슈머가 직접적으로 메세지를 쓰고 읽는 파티션입니다. 반면 팔로워 파티션은 리더 파티션의 메세지를 실시간으로 복제해와서 장애를 대비 할 수 있도록 합니다. 
    • 리더 파티션에 장애가 발생한 경우 팔로워 파티션 중 하나가 리더 역할을 대신 수행하며, 리더 파티션 내부에 있는 메시지까지 복제해서 가지고 있기 때문에 정상적으로 처리 할 수 있습니다. 
    • 실무에서는 레플리케이션 개수를 2나 3으로 설정하여 활용하는 편입니다.

 

하나의 노드에는 1개의 브로커, 1개의 컨트롤러로 구성되어 2개의 프로세스가 실행되어 세팅 할 수 있습니다.

 

Kafka는 보통 최소 3대 이상의 브로커로 클러스터를 구성하여, 일부 서버(브로커)에 장애가 발생하더라도 서비스가 중단되지 않도록 설계된 구조를 가지고 있습니다. 여러 대의 브로커로 클러스터를 구성하면 특정 브로커에 문제가 생겨도 나머지 브로커들이 역할을 나누어 처리 할 수 있습니다.

 

Kafka의 고가용성의 서버 구조 뿐만 아니라 Producer와 Consumer의 동작 방식에도 자연스럽게 활용 할 수 있습니다.

 

`Producer`는 브로커 장애나 일시적인 네트워크 문제가 발생했을 경우 재시도를 통해 전송을 이어갈 수 있으며, `ack=all` 설정을 사용하여 복제본까지 정상적으로 반영된 이후에만 성공적인 응답을 받을 수 있도록 할 수 있습니다.

`Consumer`는 Consumer Group을 통해 특정 Consumer 인스턴스에서 장애가 발생하더라도 다른 Consumer가 해당 파티션을 이어서 처리 할 수 있도록 하여 HA 구조를 설계 할 수 있도록 할 수 있습니다. 

 

다음은 MSA 구조에서 Kafka를 사용하고 설정하는 방법에 대해서 알아보겠습니다.

 

 

 

 

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/mMUzZ

300x250
저작자표시 비영리 변경금지 (새창열림)

'🌊 Data Engineering' 카테고리의 다른 글

RabbitMQ 기본 개념 정리 (+ RabbitMQ vs Kafka vs ActiveMQ)  (0) 2026.02.20
Kafka 병렬 처리를 활용한 메세지 처리 성능 높이기  (0) 2026.02.01
Kafka 기본 개념 정의 및 실패 재시도 방법 정의  (0) 2026.02.01
Apache Airflow 간단 개념 알아보기  (0) 2026.01.31
'🌊 Data Engineering' 카테고리의 다른 글
  • RabbitMQ 기본 개념 정리 (+ RabbitMQ vs Kafka vs ActiveMQ)
  • Kafka 병렬 처리를 활용한 메세지 처리 성능 높이기
  • Kafka 기본 개념 정의 및 실패 재시도 방법 정의
  • Apache Airflow 간단 개념 알아보기
최밍구
최밍구
발등에 불이 뜨겁게 배우는 중
  • 최밍구
    프로그래밍구
    최밍구
  • 전체
    오늘
    어제
    • 분류 전체보기
      • ☕️ JAVA
      • 🌱 Spring
      • 🐍 Python
      • 🗄️ DataBase
      • 🌊 Data Engineering
      • 🛠️ DevOps
      • ✨ JavaScript
        • Node.js
      • 🤖 AI
      • 🔎 알고리즘
      • 📘 IT 지식
      • 🍀 창고
        • 비트캠프
        • 취업
        • 일기장
  • 링크

    • Go Github
  • 인기 글

  • 태그

    PostgreSQL
    데이터베이스
    카프카
    dataengineering
    생활코딩
    MSA
    타임존
    제네릭
    RabbitMQ
    인터넷
    pgvector
    Java
    database
    자바
    data
    자바제네릭
    생활코딩자바
    Kafka
    Airflow
    mongoDB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
최밍구
Kafka는 어떻게 고가용성을 확보하고 있을까? (feat. 노드, 브로커, 컨트롤러, 클러스터, 래플리케이션)
상단으로

티스토리툴바