T_era
Apache Kafka란 무엇인가? 그리고 프로젝트 구상 본문
아파치 카프카(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를 이용한 메신저앱 만들어보기
(메시지 큐 시스템, 문자 메시지 알람)
프로젝트 구상:
핵심 기능:
- 메시지 발행 (Producer):
- 사용자가 텍스트 메시지를 입력하고 전송 버튼을 누르면, 해당 메시지를 카프카 토픽에 발행.
- 메시지에는 발신자, 수신자 (간단하게 특정 ID로 가정), 내용, 타임스탬프 등의 정보가 포함.
- 메시지 소비 (Consumer):
- 특정 수신자 ID를 구독하는 컨슈머 애플리케이션이 카프카 토픽에서 해당 메시지를 소비.
- 소비된 메시지를 콘솔에 출력하거나, 간단한 GUI 환경에 표시.
- 알림 기능:
- 컨슈머 애플리케이션이 새로운 메시지를 소비했을 때, 시스템 알림 (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 |