T_era

Apache Kafka란 무엇인가? 그리고 프로젝트 구상 본문

이론/백엔드 개념정리

Apache Kafka란 무엇인가? 그리고 프로젝트 구상

블스뜸 2025. 4. 29. 17:52

아파치 카프카(Apache Kafka)는 링크드인(LinkedIn)에서 개발되어 아파치 재단에 기증된 오픈소스 분산 스트리밍 플랫폼이다.
핵심적인 특징은 높은 처리량, 확장성, 내결함성을 갖춘다는 점이며, 실시간 데이터 파이프라인 및 스트리밍 애플리케이션 구축에 널리 사용하게 된다.

카프카의 주요 개념:

  • 토픽 (Topic): 카프카의 메시지는 토픽이라는 카테고리로 구성. 토픽은 데이터 스트림의 이름이라고 생각할 수 있다.
    예를 들어, "사용자 활동", "주문 정보", "로그 데이터" 등이 토픽이 될 수 있다.
  • 파티션 (Partition): 각 토픽은 하나 이상의 파티션으로 나뉜다. 파티션은 순서가 보장되는 메시지 시퀀스이며,
    카프카 클러스터 내의 여러 브로커에 분산되어 저장된다. 파티션을 통해 토픽의 처리량을 높이고 병렬 처리를 가능하게 한다.
  • 오프셋 (Offset): 각 파티션 내의 메시지는 고유한 순서 번호인 오프셋을 가진다. 소비자는 특정 오프셋부터 메시지를 읽을 수 있으며, 이를 통해 메시지 처리 상태를 관리할 수 있다.
  • 브로커 (Broker): 카프카 클러스터를 구성하는 서버를 브로커라고 합니다. 각 브로커는 하나 이상의 파티션을 저장하고 메시지 읽기/쓰기 요청을 처리한다.
  • 주키퍼 (ZooKeeper): 카프카는 클러스터 메타데이터 관리, 브로커 상태 관리, 파티션 리더 선출 등을 위해 주키퍼를 사용한다. (최근 버전에서는 주키퍼 의존성을 제거하려는 모습이 보인다고 한다.)
  • 프로듀서 (Producer): 데이터를 카프카 토픽에 쓰는 애플리케이션을 프로듀서라고 한다.
    프로듀서는 특정 토픽과 파티션을 지정하여 메시지를 발행할 수 있다.
  • 컨슈머 (Consumer): 카프카 토픽에서 데이터를 읽는 애플리케이션을 컨슈머라고 한다.
    컨슈머는 하나 이상의 토픽을 구독하고, 컨슈머 그룹을 통해 병렬로 메시지를 처리할 수 있다.
  • 컨슈머 그룹 (Consumer Group): 여러 컨슈머 인스턴스가 동일한 컨슈머 그룹에 속할 수 있다.
    컨슈머 그룹 내의 각 컨슈머는 토픽의 서로 다른 파티션을 할당받아 병렬로 메시지를 처리하고, 이를 통해 높은 처리량과 확장성을 확보할 수 있다.

카프카의 장점:

  • 높은 처리량 (High Throughput): 대량의 데이터를 실시간으로 처리할 수 있도록 설계되었다.
  • 확장성 (Scalability): 필요에 따라 브로커를 추가하여 클러스터를 쉽게 확장할 수 있다.
  • 내결함성 (Fault Tolerance): 여러 브로커에 데이터를 복제하여 일부 브로커에 장애가 발생해도 데이터 손실 없이 안정적인 서비스를 제공한다.
  • 영속성 (Persistence): 발행된 메시지는 설정된 기간 또는 용량 제한까지 디스크에 저장되므로, 소비자가 오프라인 상태였다가 재개되더라도 데이터를 유실 없이 처리할 수 있다.
  • 실시간 처리 (Real-time Processing): 데이터를 즉시 소비하고 처리할 수 있어 실시간 데이터 파이프라인 구축에 용이하다.
  • 다양한 활용 사례: 메시지 큐, 데이터 파이프라인, 이벤트 스트리밍, 로그 집계 등 다양한 목적으로 활용될 수 있다.

카프카의 활용 사례:

  • 실시간 데이터 분석: 웹사이트 클릭 스트림, 센서 데이터 등을 실시간으로 분석하여 인사이트를 도출한다.
  • 로그 집계 및 모니터링: 분산된 시스템의 로그를 중앙 집중화하여 관리하고 실시간으로 모니터링한다.
  • 이벤트 기반 마이크로서비스: 마이크로서비스 아키텍처에서 서비스 간의 비동기 통신 및 이벤트 전파에 사용된다.
  • 사물 인터넷 (IoT): IoT 장치에서 생성되는 대량의 데이터를 수집, 처리, 저장한다.
  • 추천 시스템: 사용자 행동 데이터를 실시간으로 분석하여 개인화된 추천을 제공합니다.

1차 목표 프로젝트
스프링 언어 학습 후 개인 프로젝트를 진행하면서 Spring Kafka를 이용한 메신저앱 만들어보기
(메시지 큐 시스템, 문자 메시지 알람)

프로젝트 구상:

핵심 기능:

  1. 메시지 발행 (Producer):
    • 사용자가 텍스트 메시지를 입력하고 전송 버튼을 누르면, 해당 메시지를 카프카 토픽에 발행.
    • 메시지에는 발신자, 수신자 (간단하게 특정 ID로 가정), 내용, 타임스탬프 등의 정보가 포함.
  2. 메시지 소비 (Consumer):
    • 특정 수신자 ID를 구독하는 컨슈머 애플리케이션이 카프카 토픽에서 해당 메시지를 소비.
    • 소비된 메시지를 콘솔에 출력하거나, 간단한 GUI 환경에 표시.
  3. 알림 기능:
    • 컨슈머 애플리케이션이 새로운 메시지를 소비했을 때, 시스템 알림 (System Tray Notification) 또는 간단한 팝업 형태로 알림을 표시.

세부 구현 아이디어:

  • 기술 스택:
    • 백엔드 (Producer & Consumer): Spring Boot, Spring Kafka
    • 메시지 포맷: JSON (가장 간단하고 널리 사용됨)
    • 알림: Java AWT/Swing의 SystemTray 또는 간단한 JOptionPane 활용 (GUI 환경을 사용할 경우)
  • 카프카 설정:
    • 로컬 환경에 카프카를 설치하고 기본적인 토픽을 생성.
    • Spring Kafka 설정을 통해 카프카 브로커에 연결.
  • Producer 구현:
    • 간단한 REST API 엔드포인트 (/send)를 만들어 메시지 내용을 파라미터로 받아 카프카 토픽에 발행.
    • KafkaTemplate을 사용하여 메시지를 JSON 형태로 직렬화하여 전송.
  • Consumer 구현:
    • @KafkaListener 애노테이션을 사용하여 특정 토픽을 구독하는 컨슈머를 구현.
    • 수신한 JSON 메시지를 역직렬화하여 필요한 정보를 추출.
    • 추출한 메시지 내용을 콘솔에 출력하거나 GUI에 표시하고, 알림 기능을 실행.
  • 알림 구현:
    • 새로운 메시지를 수신했을 때, 운영체제의 시스템 트레이에 알림 아이콘과 메시지 내용을 표시.
    • GUI 환경이라면 간단한 팝업 창을 띄워 메시지를 보여주기.

학습 목표:

  • Spring Kafka를 이용한 기본적인 메시지 발행 및 소비 흐름 이해
  • KafkaTemplate과 @KafkaListener 애노테이션 사용법 숙지
  • 메시지 직렬화 및 역직렬화 개념 이해
  • 간단한 알림 기능 구현 방법 학습

'이론 > 백엔드 개념정리' 카테고리의 다른 글

2. Redis String관련  (0) 2025.04.30
1. Redis에서 사용하는 자료구조  (0) 2025.04.30
Docker 명령어  (0) 2025.04.30
Docker??  (0) 2025.04.30
0. Redis 기본 개념  (0) 2025.04.30