기타

[Apache Kafka] 개념

비번변경 2025. 9. 2. 15:35

개요

업무 중 Apache Kafka를 사용하게 되어 Kafka란 대체 무엇인지 정리해 본다.

 

 

이벤트 스트리밍

Kafka를 논하기 전에 먼저 이벤트 스트리밍에 대해서 적어둔다.

 

데이터베이스, 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 애플리케이션과 같은 이벤트 소스에서 실시간으로 데이터를 이벤트 스트림 형태로 수집하고, 수집한 이벤트 스트립을 검색할 수 있도록 저장하며, 실시간 및 소급적으로 조작, 처리 및 대응하고, 필요에 따라 다양한 목적지 기술로 라우팅 하는 방식을 말한다.

데이터의 지속적인 흐름과 해석을 보장하며 적절한 정보가 직절한 시간과 장소에 제공되도록 한다.

 

이벤트 스트리밍은 아래와 같이 다양한 분야에서 사용되고 있다.

- 증권 거래소, 은행, 보험 등에서의 실시간 결제 및 금융 거래 처리

- 자동차, 트럭, 차량대, 배송물 실시간 추적 및 모니터링

- 센서 데이터 지속 수집 및 분석

- 소매, 호텔 및 여행 업계, 모바일 애플리케이션에서의 고개 상호작용과 주문 수집, 즉시 대응

- 병원 치료 환자 모니터링 및 상태 변화 예측, 응급 상황에서의 적시 치료 보장

 

 

Aapache Kafka 란

Apache Kafka는 이벤트 스트리밍 플랫폼이라고 정의하며 아래와 같은 기능을 제공한다.

- 다른 시스템에서 데이터를 지속적으로 가져오거나 내보내는 것을 포함하는 이벤트 스트림을 게시하고 구독한다.

- 원하는 기간 동안 이벤트 스트림을 지속적, 안정적으로 저장한다.

- 사건의 흐름을 실시간 또는 회고적으로 처리한다.

 

 

동작 방식

서버와 클라이언트로 구성된 분산 시스템으로, TCP 프로토콜로 통신한다. 온프레미스, 클라우드 환경의 베어 메탈 하드웨어, 가상 머신, 컨테이너 등에 배포할 수 있다.

 

서버 : 여러 데이터 센터, 클라우드 리전에 걸쳐 있는 하나 이상의 서버로 구성된 클러스터로 실행된다. 서버 중 일부는 브로커라고 하는 스토리지 계층을 구성한다. 그리고 다른 서버는 kafka connect를 실행해 이벤트 스트림으로 데이터를 지속적으로 가져오고 내보내며 관계형 데이터베이스 및 다른 kafka 클러스터와 같은 기존 시스템을 통합한다. kafka 클러스터는 높은 확장성과 내결함성을 제공하며 서버에 장애가 발생하더라도 다른 서버가 작업을 인계받아 데이터 손실 없이 지속적인 운영을 보장한다.

 

클라이언트 : 장애가 발생하더라도 이벤트 스트림을 병렬, 대규모, 내결함성 방식으로 읽고 쓰고 처리하는 분산 애플리케이션과 마이크로서비스를 작성할 수 있다. Java, Scala, Go, Python, C/C++ 및 다른 프로그래밍 언어, REST API를 지원한다.

 

 

개념

이벤트

어떤 일이 일어났다는 사실을 나타내며, 레코드 또는 메시지라고 한다. 카프카는 데이터를 읽거나 쓸 때, 이벤트 형식으로 작업을 수행한다. 이벤트는 키, 값, 타임스탬프, 메타데이터 헤더를 포함하고 있다.

 

생산자

카프카에 이벤트를 게시하는 클라이언트 애플리케이션

 

소비자

이벤트를 구독하여 데이터를 읽고 처리하는 애플리케이션

카프카에서는 확장성을 높이기 위해 생산자와 소비자가 완전히 분리되어 있다. 

 

토픽

카프카에서 이벤트는 토픽에 구성되고 내구성 있게 저장된다. 파일 시스템에 비유하자면 토픽은 폴더에 해당하고, 이벤트는 파일에 해당한다. 토픽은 다중 생산자와 다중 소비자를 가지며, 그 수는 각각 0개일 수도 있다. 기존 메시징 시스템과 다르게 Kakfa에서는 소비된 이벤트가 삭제되지 않는다. 대신 토픽 구성 설정을 통해 이벤트 보관 주기를 설정하고, 보관 기간을 넘긴 오래된 이벤트를 삭제한다.

토픽은 파티셔닝 되어 있는데, 이는 여러 Kafka 브로커에 위치한 여러 버킷에 분산 저장된다는 것을 의미한다. 클라이언트 애플리케이션이 여러 브로커에서 여러 데이터를 동시에 읽고 쓸 수 있게 하기 때문에 확장성에 매우 중요한 분이다.

 

 

참고 문서

https://kafka.apache.org/intro

 

 

728x90