[나만무] 카프카 공식문서를 읽고 정리

Curric·2025년 7월 11일
1

이벤트 스트리밍이란?

이벤트 스트리밍은 인체의 중추신경계에 비유할 수 있는 디지털 시스템의 핵심 개념이다.

인체의 중추 신경계는
인체의 중추신경계가 신체 곳곳에서 발생하는 모든 감각 정보를 실시간으로 수집하고 통합하여, 필요한 신체 부위가 즉각적으로 반응하도록 조절하는 것처럼, 이벤트 스트리밍 플랫폼은 기업의 다양한 데이터 소스에서 발생하는 모든 '이벤트(사건)'를 실시간으로 포착한다. 그리고 이 데이터를 필요한 시스템에 즉시 전달하여, 기업 전체가 하나의 유기체처럼 유기적으로 반응하고 의사결정을 내릴 수 있도록 돕는다.

이는 산업이 점점 더 소프트웨어로 정의되고 자동화되는 ‘always-on’(24/7) 세상과, 소프트웨어를 이용하는 주체가 점점 소프트웨어가 되어가고 있는 세상을 위한 기술 기반이다.

  • 시스템은 24/7 실시간으로 데이터를 주고받아야 한다. 사용자 또한 앱이나 서비스(소프트웨어)를 통해 상호작용하므로, 이벤트 스트리밍은 이런 환경을 가능케 하는 토대 역할을 한다.

기술적인 맥락에서, 이벤트 스트리밍은

다양한 시스템에서 발생하는 이벤트를 실시간으로 받아오고 조회가능한 데이터로 저장한다. 데이터를 순서대로, 내구성있게 저장하여, 실시간 혹은 사후에 조작하고 화면에 나타내어 분석 결과를 다른 시스템에 전달한다.

결국 이벤트 스트리밍을 도입하면 이벤트 스트리밍을 도입한다는 것은, 애플리케이션에서 발생하는 '언제, 어디서, 누가, 무엇을 했는가' 라는 모든 사건의 흐름을 실시간으로 감지하고, 이를 바탕으로 데이터에 기반한 즉각적인 대응과 자동화된 의사결정이 가능한 디지털 신경망을 구축하는 것과 같다.

이벤트 스트리밍은 어디에 사용하나?

  • 가격변동이나 주문 체결을 지연 없이 처리해야 하는 금융 시스템
  • 물류 혹은 운송 산업 등에서 자동차, 트럭, 차량 대열, 선적을 실시간으로 추적하고 모니터링 할 때
  • 공장 및 발전소 등에서 IoT 디바이스나 기타 장비의 센서 데이터를 지속적으로 캡쳐하고 분석
  • 고객에게 즉각적인 반응이 필요한 호텔, 여행 산업, 모바일 앱 등에서 주문, 실시간 추천, 재고 관리, 알림 발송 등을 자동으로 할 수 있음
  • 환자의 바이탈 사인을 실시간 분석해 상태 변화를 예측하여 응급 상황에서 시기적절한 치료를 보장하기 위해.
  • 회사의 다른 부문에서 생성된 데이터를 연결·저장·제공하여 전사 차원의 협업을 촉진함

카프카는 이벤트 스트리밍 플랫폼이다. 이 말의 의미는?

카프카가 단순히 데이터를 한 곳에서 다른 곳으로 전달하는 '파이프'가 아니라, 데이터의 발생부터 저장, 처리, 활용에 이르는 전 과정을 책임지는 하나의 완결된 생태계라는 의미를 담고 있다.

  • 카프카는 복잡한 데이터 파이프라인을 구축하기 위해 여러 가지 다른 도구를 조합할 필요 없이, 아래 세 가지 핵심 기능을 하나의 검증된 솔루션 안에서 엔드투엔드(End-to-End)로 제공한다.

첫 번째 기능,
카프카는 다른 시스템에서 발생하는 이벤트 스트림을 실시간으로 쓰고(Write), 필요한 시스템이 이를 즉시 읽어갈(Read) 수 있는 통로를 제공한다.

두 번째 기능,
이벤트 스트림을 원하는 기간만큼(e.g., 7일, 30일, 혹은 영구적으로) 삭제하지 않고 안전하게 보관한다.

  • 이것이 카프카를 단순 메시지 큐와 구분 짓는 가장 큰 특징이다. 데이터는 '한번 쓰고 버리는' 것이 아니라, 언제든 다시 꺼내 쓸 수 있는 ‘신뢰할 수 있는 데이터 자산'이 된다. 이를 통해 데이터 처리 중 장애가 발생해도 복구가 가능하며(리플레이), 새로운 분석 시스템이 과거 데이터까지 모두 학습하는 것도 가능하다.

세 번째 기능,

이벤트가 발생하는 그 순간 실시간으로 처리하는 것은 물론, 저장된 과거의 데이터를 다시 처리할 수 있는 기능을 제공한다.

이 모든 기능은 여러 서버(노드)에 걸쳐 분산되어 동작하므로, 장애가 발생해도 자동으로 복구되며, 트래픽 증가에 맞춰 유연하게 확장할 수 있고, 강력한 보안이 보장된다.

또한, 카프카는 베어메탈, 가상머신, 컨테이너 등 어떤 인프라 환경에도 배포할 수 있어, 기업이 특정 클라우드에 종속되지 않는 기술적 유연성을 확보할 수 있게 해준다.

카프카는 어떻게 이렇게 간단하게 동작하는가?

카프카 시스템은 크게 서버 클러스터와, 이 클러스터와 상호작용하는 클라이언트로 구성된다.

서버

카프카는 하나 이상의 서버 클러스터로 실행된다.

이 중 일부는 브로커라 불리는 저장 계층을 형성하고, 또 다른 서버는 Kafka Connect를 실행해 관계형 DB나 다른 카프카 클러스터와 같은 기존 시스템과 데이터를 지속적으로 가져오고 내보낸다. 서버가 하나라도 실패하면, 나머지 서버가 역할을 이어받아 데이터 손실 없이 연속 운영을 보장한다.

  • 브로커: 프로듀서로부터 받은 이벤트(데이터)를 토픽(폴더와 비슷) 내부에 물리적으로 저장하고 관리하는 핵심 서버. 클러스터는 보통 여러 대의 브로커로 구성되어, 데이터를 분산 저장하고 부하를 나눈다.
    • 브로커 중 하나에 장애가 발생하더라도, 다른 브로커에 복제된 데이터가 있기 때문에 데이터 손실 없이 서비스 운영을 지속할 수 있다. 나머지 브로커들이 장애가 발생한 브로커의 역할을 자동으로 이어받아 처리한다.
  • Kafka Connect(API): 외부 시스템과 연동해 데이터를 전송(파이프라인을 구축)
    • 데이터를 가져오거나(Source), 내보내는(Sink) 파이프라인을 쉽게 구축할 수 있도록 돕는 데이터 통합 프레임워크. 개발자가 별도의 코드를 작성하지 않고도, 간단한 설정만으로 관계형 데이터베이스, S3, 다른 카프카 클러스터 등 외부 시스템과 데이터를 지속적으로 주고받을 수 있게 해준다.

클라이언트

클라이언트는 카프카와 연결되어 데이터를 주고받는 프로그램(또는 라이브러리)이다. 이 클라이언트를 쓰면, 네트워크가 불안정하거나 서버에 문제가 생겨도 안전하게 데이터를 읽고 쓰면서 처리할 수 있다.

프로듀서(Producer)

  • 애플리케이션에서 만든 이벤트를 특정 토픽의 파티션(브로커 내부)에 전송(쓰기)한다.
    • 애플리케이션 → 카프카
  • 파티션 분배 전략(키값 기반 라우팅 등)을 통해 순서를 보장하거나 부하를 분산시킬 수 있다.

컨슈머 (Consumer)

  • 역할: 특정 토픽을 구독하여, 저장된 이벤트를 가져와서(읽어서) 처리하는 역할을 한다. (카프카 → 애플리케이션)

주요 개념 및 용어

카프카의 세계에서 모든 데이터는 '이벤트(Event)' 단위로 통신한다. 이벤트란, 우리의 비즈니스나 애플리케이션에서 발생한 "어떤 사건(something happened)"에 대한 기록이다. 예를 들어, 사용자의 '결제 완료', '페이지 클릭', '센서 값 측정' 등이 모두 하나의 이벤트가 될 수 있다.

  • 키(Key): 분배·정렬·파티션 지정에 쓰임
  • 값(Value): 실제 비즈니스 데이터 내용
  • 타임스탬프: 이벤트 발생 시각
  • 메타데이터 헤더: 추가 정보(버전, 형식 등)
    • Event key: "Alice"
    • Event value: "Made a payment of $200 to Bob"
    • Event timestamp: "Jun. 25, 2020 at 2:06 p.m."

프로듀서는 데이터를 보내고(write) 소비자는 데이터를 받아서 처리한다(read & process). Kafka에서는 프로듀서와 컨슈머가 완전히 분리되어 서로를 알지 못한다. 생산자와 소비자가 서로의 상태나 처리 속도를 전혀 신경 쓰지 않기 때문에, 시스템 용량을 키울 때 한쪽이 다른 쪽의 병목을 일으키지 않는다. 에컨대 생산자는 소비자의 데이터 처리 속도를 신경쓰지 않고 데이터를 kafka에 기록하기만 하면 된다.

또한 Kafka는 이벤트를 정확히 한 번만 처리할 수 있는 기능 등 다양한 보장 기능을 제공한다. 그래서 중복 처리나 누락 없이 안전하게 데이터를 전달할 수 있다.

카프카에선 이벤트를 토픽이라는 단위로 묶어서 디스크에 보관(영속적)한다. 단순하게 설명하면

  • 토픽은 파일 시스템의 폴더와 비슷하고, 이벤트는 그 폴더 안의 파일과 같다. 토픽 하나에 여러 애플리케이션이 동시에 데이터를 쓰고, 또 여러 애플리케이션이 그 데이터를 읽을 수 있어 유연한 분산 구조를 제공한다.
  • 카프카는 하나의 큰 토픽을 여러 개의 '파티션'으로 쪼개어, 클러스터 내의 여러 서버(브로커)에 분산 저장한다. 이를 통해 읽고 쓰는 작업을 병렬로 수행할 수 있어 처리량이 크게 늘어난다.
  • 동일한 이벤트 키(예: 고객 ID나 차량 ID)를 가진 이벤트는 같은 파티션에 기록되며, 카프카는 특정 토픽-파티션을 구독하는 컨슈머가 그 파티션에 기록된 이벤트를 작성된 순서대로 항상 읽도록 보장한다.

전통적인 메시징 시스템과 달리, 카프카는 컨슈머가 이벤트를 한번 읽어가도 데이터를 바로 삭제하지 않는다.

  • 리플레이(Replay) 기능: 보관된 과거 데이터는 언제든지 다시 읽을 수 있다. 이를 통해 새로운 기능이 추가되었을 때 과거 데이터까지 모두 재처리하거나, 장애 발생 시 데이터를 복구하는 등 유연한 데이터 활용이 가능.
  • 보존 정책: 토픽별 설정을 통해 카프카가 이벤트를 얼마나 오랫동안 보관할지 정의할 수 있다. 설정 기간(e.g., 3일)이 지나면 오래된 이벤트는 자동으로 삭제된다.
profile
curric

0개의 댓글