본문 바로가기
Backend

[Backend] kafka 알아보기

by JINJINC 2025. 3. 13.
728x90
반응형

일단 kafka를 적용해보기에 앞서 kafka에 대해 자세히 알아보겠ㅅ븐디ㅏ.

1. Kafka 기본 개념

Kafka의 구조와 동작 방식을 먼저 이해하는 것이 중요합니다.

1) Kafka란?

  • 분산 메시징 시스템으로 대량의 데이터를 비동기적으로 처리하는 데 사용
  • 실시간 데이터 스트리밍, 로그 수집, 이벤트 처리에 강점
  • 주요 용도:
    • 비동기 데이터 처리 (이벤트 기반 아키텍처)
    • 마이크로서비스 간 메시지 큐 역할
    • 로그 수집 및 분석
    • IoT, 실시간 모니터링

2) Kafka 아키텍처

  • Producer: 메시지를 Kafka로 전송하는 역할 (ex: 크롤링 서버)
  • Broker: 메시지를 저장하고 Consumer에게 전달하는 중간 매개체 (Kafka 서버)
  • Topic: 데이터가 저장되는 공간 (메시지를 그룹핑)
  • Partition: Topic을 쪼개어 여러 서버에 저장하여 성능과 가용성을 높임
  • Consumer: 메시지를 읽는 역할 (ex: Spring Boot 서비스)
  • Zookeeper: 클러스터의 상태를 관리하는 코디네이터
Producer → Kafka Broker (Topic → Partitions) → Consumer

메시지가 Kafka에 저장되고, Consumer가 필요할 때 가져감
Consumer는 여러 개일 수 있으며, 각기 다른 Group을 사용하여 데이터를 분배

Kafka에서는 기본적으로 여러 개의 브로커(Broker)로 구성된 클러스터를 운영됩니다. 클러스터(cluster) 자체가 여러 개 있는 것은 아니라, 하나의 Kafka 클러스터가 여러 개의 브로커로 구성됩니다.

 

Kafka 클러스터란?

  • Kafka 클러스터는 하나 이상의 브로커(Broker)로 이루어진 집합입니다.
  • 브로커(Broker)는 Kafka 서버를 의미하며, 실제로 메시지를 저장하고 관리하는 역할을 합니다.
  • 일반적으로 Kafka는 하나의 클러스터를 운영하며, 이 클러스터 안에서 여러 개의 브로커가 동작합니다.

여러 개의 브로커(Broker)로 구성되는 이유

Kafka 클러스터는 확장성(Scalability), 고가용성(High Availability, HA), 내결함성(Fault Tolerance)을 고려하여 여러 개의 브로커를 운영합니다.

1️⃣ 확장성(Scalability)

  • Kafka는 수평 확장이 가능하므로, 브로커 수를 늘려 더 많은 트래픽을 처리할 수 있습니다.
  • 여러 개의 브로커를 추가하면 더 많은 메시지를 저장하고, 더 빠른 성능을 제공할 수 있습니다.

2️⃣ 고가용성(High Availability, HA)

  • Kafka는 파티션 복제(Replication) 기능을 제공하여 장애 발생 시에도 메시지를 손실 없이 제공할 수 있습니다.
  • 예를 들어, replication factor=3으로 설정하면 같은 데이터를 3개의 브로커에 저장하여 하나가 죽어도 데이터를 복구할 수 있습니다.

3️⃣ 내결함성(Fault Tolerance)

  • Kafka 클러스터에서 특정 브로커가 장애를 일으켜도, Zookeeper가 이를 감지하고 새로운 리더를 선출하여 지속적인 서비스가 가능하도록 합니다.
  • 예를 들어, 리더 브로커가 다운되면 Zookeeper는 팔로워 중 하나를 새로운 리더로 선출합니다.

3) Kafka에서 Zookeeper의 역할이란? 

1. 브로커 관리 및 클러스터 조정

  • Kafka 클러스터에서 여러 개의 브로커가 실행될 때, Zookeeper는 브로커의 상태를 감시하고 관리합니다.
  • 새로운 브로커가 추가되거나 장애가 발생하면 이를 감지하고, 리더 선출 등의 조정을 수행합니다.

2. 리더 선출(Leader Election)

  • Kafka의 토픽은 여러 개의 파티션으로 구성되며, 각 파티션은 여러 개의 복제본(replica)을 가질 수 있습니다.
  • Zookeeper는 파티션마다 리더(Leader) 브로커를 선출하여 해당 파티션에 대한 읽기/쓰기 요청을 담당하도록 합니다.
  • 만약 리더 브로커가 다운되면, Zookeeper는 새로운 리더를 선출하여 서비스 중단을 방지합니다.

3. 메타데이터 관리

  • Kafka는 토픽, 파티션, 브로커 목록, ACL(Access Control List) 등의 메타데이터를 저장하고 관리하는데, 이를 Zookeeper를 통해 유지합니다.
  • 클라이언트(Kafka Producer, Consumer)는 Zookeeper를 통해 현재 가용한 브로커 정보를 얻어 메시지를 생산하거나 소비할 수 있습니다.

4. 컨트롤러 브로커 선출

  • Kafka 클러스터에서 컨트롤러 브로커(Controller Broker)를 하나만 유지해야 합니다.
  • 컨트롤러는 파티션의 리더 선출, 토픽 생성 및 삭제 등을 담당하는 중요한 역할을 합니다.
  • Zookeeper는 컨트롤러 브로커를 선출하고, 해당 컨트롤러가 죽으면 새로운 컨트롤러를 자동으로 선출합니다.

5. ACL 및 보안 정책 관리

  • Zookeeper는 Kafka의 **ACL(Access Control List)**을 관리하여 특정 사용자(프로듀서, 컨슈머, 관리자)가 어떤 토픽에 접근할 수 있는지 정의하는 데 사용됩니다.

 

이벤트 스트리밍이란?

이벤트 스트리밍은 인체의 중추 신경계의 디지털 버전입니다. 이는 기업이 점점 더 소프트웨어로 정의되고 자동화되고 소프트웨어 사용자가 더 많은 소프트웨어인 '항상 켜진' 세상을 위한 기술적 기반입니다.

기술적으로 말하면, 이벤트 스트리밍은 데이터베이스, 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 애플리케이션과 같은 이벤트 소스에서 이벤트 스트림 형태로 실시간으로 데이터를 가져가는 역할입니다. 이러한 이벤트 스트림을 나중에 검색할 수 있도록 내구성 있게 저장합니다. 이벤트 스트림을 실시간으로 그리고 회고적으로 조작, 처리 및 반응합니다. 그리고 필요에 따라 이벤트 스트림을 다른 대상 기술로 라우팅합니다. 따라서 이벤트 스트리밍은 적절한 정보가 적절한 시간에 적절한 장소에 있도록 데이터의 지속적인 흐름과 해석을 보장합니다.

 

이벤트 스트리밍을 무엇에 활용할 수 있나요?

이벤트 스트리밍은 다양한 산업과 조직에서 다양한 사용 사례 에 적용됩니다 . 그 중 많은 예는 다음과 같습니다.

  • 증권 거래소, 은행, 보험 등에서 결제 및 금융 거래를 실시간으로 처리합니다.
  • 물류 및 자동차 산업 등에서 자동차, 트럭, 차량대, 배송물을 실시간으로 추적하고 모니터링합니다.
  • 공장이나 풍력 발전소 등 IoT 장치나 기타 장비에서 센서 데이터를 지속적으로 수집하고 분석합니다.
  • 소매, 호텔 및 여행 업계, 모바일 애플리케이션 등에서 고객 상호작용 및 주문을 수집하고 즉시 대응합니다.
  • 병원 치료 중인 환자를 모니터링하고 상태 변화를 예측하여 응급 상황에서 적절한 치료를 보장합니다.
  • 회사의 다양한 부서에서 생산되는 데이터를 연결, 저장하고, 이용 가능하게 만듭니다.
  • 데이터 플랫폼, 이벤트 기반 아키텍처, 마이크로서비스의 기반 역할을 합니다.

Apache Kafka®는 이벤트 스트리밍 플랫폼입니다.

  1. 다른 시스템에서 데이터를 지속적으로 가져오고 내보내는 것을 포함하여 이벤트 스트림을 게시(쓰기)하고 구독( 읽기 ) 합니다 .
  2. 원하는 기간 동안 이벤트 스트림을 지속적이고 안정적으로 저장합니다 .
  3. 발생하는 대로 또는 회고적으로 이벤트 스트림을 처리합니다 .

카프카는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버 와 클라이언트 로 구성된 분산 시스템입니다 . 온프레미스와 클라우드 환경의 베어 메탈 하드웨어, 가상 머신 및 컨테이너에 배포할 수 있습니다.

 

서버 : Kafka는 여러 데이터 센터 또는 클라우드 지역에 걸쳐 있는 하나 이상의 서버 클러스터로 실행됩니다. 이러한 서버 중 일부는 브로커라고 하는 스토리지 계층을 형성합니다. 다른 서버는 Kafka Connect를 실행하여 데이터를 이벤트 스트림으로 지속적으로 가져오고 내보내 Kafka를 관계형 데이터베이스 및 다른 Kafka 클러스터와 같은 기존 시스템과 통합합니다. 미션 크리티컬 사용 사례를 구현할 수 있도록 Kafka 클러스터는 확장성이 뛰어나고 내결함성이 있습니다. 서버 중 하나가 실패하면 다른 서버가 작업을 인계하여 데이터 손실 없이 지속적인 운영을 보장합니다.

클라이언트 : 네트워크 문제나 머신 장애가 발생하더라도 병렬로, 대규모로, 내결함성 방식으로 이벤트 스트림을 읽고, 쓰고, 처리하는 분산 애플리케이션과 마이크로서비스를 작성할 수 있습니다. Kafka에는 이러한 클라이언트가 일부 포함되어 있으며, Kafka 커뮤니티에서 제공하는 수십 개의 클라이언트 로 보강됩니다 . 클라이언트는 Java 및 Scala, 상위 수준 Kafka Streams 라이브러리, Go, Python, C/C++ 및 기타 여러 프로그래밍 언어와 REST API를 위해 제공됩니다

이 예제 토픽에는 P1–P4라는 네 개의 파티션이 있습니다. 두 개의 다른 프로듀서 클라이언트가 네트워크를 통해 토픽의 파티션에 이벤트를 작성하여 서로 독립적으로 토픽에 새 이벤트를 게시합니다. 같은 키(그림에서 색상으로 표시)를 가진 이벤트는 같은 파티션에 작성됩니다. 두 프로듀서 모두 적절한 경우 같은 파티션에 쓸 수 있습니다.

 

Kafka는 관리 및 관리 작업을 위한 명령줄 툴링 외에도 Java 및 Scala를 위한 5가지 핵심 API를 제공합니다.

  • 토픽, 브로커 및 기타 Kafka 객체를 관리하고 검사하는 Admin API입니다 .
  • Producer API는 하나 이상의 Kafka 토픽에 이벤트 스트림을 게시(작성)합니다.
  • Consumer API는 하나 이상의 주제를 구독(읽기)하고 해당 주제에 생성된 이벤트 스트림을 처리합니다.
  • Kafka Streams API는 스트림 처리 애플리케이션과 마이크로서비스를 구현합니다. 변환, 집계 및 조인과 같은 상태 저장 작업, 윈도잉, 이벤트 시간 기반 처리 등을 포함하여 이벤트 스트림을 처리하는 상위 레벨 기능을 제공합니다. 하나 이상의 토픽에서 입력을 읽어 하나 이상의 토픽에 출력을 생성하여 입력 스트림을 출력 스트림으로 효과적으로 변환합니다.
  • Kafka Connect API는 외부 시스템 및 애플리케이션에서 이벤트 스트림을 소비(읽기)하거나 생성(쓰기)하여 Kafka와 통합할 수 있는 재사용 가능한 데이터 가져오기/내보내기 커넥터를 빌드하고 실행합니다. 예를 들어 PostgreSQL과 같은 관계형 데이터베이스에 대한 커넥터는 테이블 집합의 모든 변경 사항을 캡처할 수 있습니다. 그러나 실제로는 Kafka 커뮤니티가 이미 수백 개의 즉시 사용 가능한 커넥터를 제공하기 때문에 일반적으로 자체 커넥터를 구현할 필요가 없습니다.

 

참고 학습 자료

728x90
반응형

댓글