일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이차전지관련주
- 알고리즘
- JavaScript
- effectivejava
- 이펙티브 자바
- 카카오 면접
- 자바
- java
- 카카오
- Sort
- Spring
- k8s
- 예제로 배우는 스프링 입문
- 스프링
- 스프링 핵심원리
- 알고리즘정렬
- ElasticSearch
- 티스토리챌린지
- 클린아키텍처
- kubernetes
- 스프링핵심원리
- Effective Java 3
- 엘라스틱서치
- Effective Java
- 이펙티브자바
- 자바스크립트
- 오블완
- 스프링부트
- 코딩테스트
- 김영한
- Today
- Total
Kim-Baek 개발자 이야기
Apache Kafka 란? 본문
Apache Kafka는 고성능, 분산형 이벤트 스트리밍 플랫폼으로, 대규모 데이터 스트림을 실시간으로 처리하고 관리할 수 있게 해줍니다. Kafka는 원래 LinkedIn에서 내부 메시징 시스템으로 개발되었으며, 현재는 오픈 소스로 제공되어 다양한 애플리케이션에서 널리 사용되고 있습니다.
주요 특징
- 높은 처리량: 수백 메가바이트에서 기가바이트 단위의 데이터를 초당 처리할 수 있습니다.
- 확장성: 클러스터 규모를 손쉽게 확장할 수 있어 대규모 데이터 스트림을 처리할 수 있습니다.
- 내결함성: 데이터 복제와 분산 저장을 통해 장애 발생 시에도 데이터 손실 없이 안정적으로 운영됩니다.
- 실시간 처리: 실시간으로 데이터를 생산하고 소비할 수 있어, 실시간 분석 및 모니터링에 적합합니다.
- 다양한 사용 사례: 로그 수집, 실시간 데이터 파이프라인 구축, 이벤트 소싱, 스트림 처리 등 다양한 분야에서 활용됩니다.
Kafka의 주요 구성 요소
1. Producer (생산자)
Producer는 데이터를 생성하여 Kafka 클러스터의 특정 주제(Topic)에 전송하는 역할을 합니다. 예를 들어, 웹 애플리케이션의 사용자 활동 로그를 Kafka로 전송할 수 있습니다.
2. Consumer (소비자)
Consumer는 Kafka 클러스터에서 데이터를 읽어들이는 역할을 합니다. 소비자는 특정 주제의 데이터를 구독(subscribe)하여 처리하거나 저장할 수 있습니다.
3. Topic (주제)
Topic은 Kafka에서 데이터를 구분하는 단위입니다. 각 Topic은 특정 데이터 스트림을 나타내며, Producer는 데이터를 Topic에 전송하고, Consumer는 Topic을 구독하여 데이터를 소비합니다.
4. Partition (파티션)
각 Topic은 여러 개의 파티션으로 나뉩니다. 파티션은 데이터가 병렬로 처리될 수 있도록 분할하는 단위로, 각 파티션은 순서가 보장된 로그입니다. 파티션 덕분에 Kafka는 고성능과 확장성을 동시에 제공합니다.
5. Broker (브로커)
Broker는 Kafka 클러스터를 구성하는 서버입니다. 각 Broker는 여러 Topic의 파티션을 호스팅하며, 클러스터 내에서 데이터를 저장하고 전송하는 역할을 합니다.
6. Zookeeper
Zookeeper는 Kafka 클러스터의 메타데이터를 관리하고, Broker들의 상태를 모니터링하는 역할을 합니다. 다만, 최신 Kafka 버전에서는 Zookeeper 의존성을 줄이고 자체적인 클러스터 관리 기능을 도입하고 있습니다.
Kafka의 동작 방식
- 데이터 생산 (Producing Data): Producer가 특정 Topic에 데이터를 전송합니다. 이때 데이터는 해당 Topic의 특정 파티션에 기록됩니다.
- 데이터 저장 (Storing Data): Broker는 데이터를 디스크에 저장하며, 복제를 통해 내결함성을 보장합니다.
- 데이터 소비 (Consuming Data): Consumer가 Topic을 구독하고, 원하는 파티션의 데이터를 읽어옵니다. Consumer는 자신의 읽은 위치(오프셋)를 관리하여, 필요 시 재처리할 수 있습니다.
Kafka의 주요 개념
1. Offset (오프셋)
오프셋은 각 파티션 내에서 메시지의 고유 번호입니다. Consumer는 오프셋을 통해 자신이 읽은 위치를 추적하며, 이를 기반으로 메시지를 정확히 한 번 읽거나 반복해서 읽을 수 있습니다.
2. Consumer Group (소비자 그룹)
Consumer Group은 여러 Consumer가 하나의 그룹으로 묶여 데이터를 소비하는 방식입니다. 각 Consumer는 그룹 내에서 특정 파티션을 할당받아 데이터를 읽기 때문에, 병렬 처리를 통해 처리 속도를 높일 수 있습니다.
3. Replication (복제)
Kafka는 데이터의 내결함성을 위해 각 파티션의 데이터를 여러 Broker에 복제(Replication)합니다. 복제된 데이터는 Leader와 Follower로 구분되며, Leader가 데이터를 읽고 쓰는 역할을 합니다. Leader에 장애가 발생하면 Follower 중 하나가 새로운 Leader로 승격됩니다.
4. Retention Policy (보존 정책)
Kafka는 데이터를 일정 기간 동안 보존하는 정책을 설정할 수 있습니다. 예를 들어, 데이터를 7일간 보관하거나, 100GB까지 저장하도록 설정할 수 있습니다. 보존 기간이 지난 데이터는 자동으로 삭제됩니다.
Kafka의 사용 사례
- 로그 수집 및 분석
- 애플리케이션 로그를 실시간으로 수집하고 분석하여 시스템 상태를 모니터링합니다.
- 실시간 데이터 파이프라인
- 다양한 데이터 소스에서 데이터를 수집하여 실시간으로 분석, 처리, 저장합니다.
- 이벤트 소싱
- 시스템 상태 변화를 이벤트의 형태로 기록하여, 상태 재구성이나 감사 로그로 활용합니다.
- 스트림 처리
- 실시간으로 들어오는 데이터를 처리하여 실시간 분석, 필터링, 집계 등을 수행합니다.
- 메시징 시스템 대체
- 전통적인 메시징 시스템(예: RabbitMQ, ActiveMQ)을 대체하여 더 높은 처리량과 확장성을 제공합니다.
Kafka의 장점
- 높은 처리량과 낮은 지연 시간: 대규모 데이터를 실시간으로 처리할 수 있어, 실시간 애플리케이션에 적합합니다.
- 확장성: 클러스터를 쉽게 확장하여 더 많은 데이터를 처리할 수 있습니다.
- 내결함성: 데이터 복제와 장애 조치(Failover) 기능을 통해 높은 가용성을 보장합니다.
- 유연한 데이터 소비: 다양한 방식으로 데이터를 소비할 수 있어, 다양한 애플리케이션과의 통합이 용이합니다.
- 풍부한 생태계: Kafka Streams, Kafka Connect 등 다양한 도구와 통합되어 데이터 파이프라인을 쉽게 구축할 수 있습니다.
Spring Kafka 를 통해서, Spring 에서는 편하게 사용할 수 있습니다.
Spring Kafka란?
Spring Kafka는 Spring 프레임워크를 기반으로 Apache Kafka와의 상호 작용을 단순화하고, 생산자(Producer)와 소비자(Consumer)를 쉽게 구성할 수 있도록 지원하는 프로젝트입니다. Spring Kafka는 Spring Boot와 자연스럽게 통합되어 설정과 사용이 간편하며, Spring의 의존성 주입, 이벤트 처리, 트랜잭셔널 지원 등 다양한 기능을 활용할 수 있습니다.
주요 특징
- Spring Boot 통합: Spring Boot와의 원활한 통합을 통해 자동 설정(auto-configuration)과 간편한 설정 관리를 제공합니다.
- 간편한 설정: 프로듀서와 컨슈머에 대한 설정을 간단하게 구성할 수 있습니다.
- 리치한 추상화: KafkaTemplate, @KafkaListener 등 고수준의 추상화를 제공하여 Kafka와의 상호 작용을 단순화합니다.
- 트랜잭션 지원: 메시지 전송과 소비에 대한 트랜잭션을 지원하여 데이터 일관성을 보장합니다.
- 병렬 처리 및 동시성: 멀티스레딩과 병렬 처리를 지원하여 고성능 애플리케이션을 구현할 수 있습니다.
- 에러 핸들링 및 리트라이: 메시지 처리 중 발생하는 에러를 효과적으로 핸들링하고, 리트라이 메커니즘을 제공합니다.
- 메시지 변환: JSON, XML 등 다양한 형식의 메시지를 자동으로 변환할 수 있습니다.
- 보안: TLS/SSL, SASL 인증 등을 통한 안전한 통신을 지원합니다.
'개발 > Spring' 카테고리의 다른 글
Quartz 란? (0) | 2024.11.15 |
---|---|
JPA N+1 문제 (0) | 2024.11.14 |
RabbitMq 란 (1) | 2024.11.09 |
Spring Cloud Config (0) | 2024.11.08 |
Spring Quartz 란? (0) | 2024.11.07 |