| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Elasticsearch
- rabbitmq
- Logstash
- 자료형
- sql injection
- 조건문
- BFS
- 불리언
- segment
- 문자열
- Apache Kafka
- Kafka
- Python
- programmers
- XSS
- Lv3
- 프로그래머스
- CSRF
- 딕셔너리
- CORS
- Kibana
- Message
- 숫자게임
- queue
- elk스택
- 데이터분석
- topic
- partition
- 튜플
- 로그관리
- Today
- Total
dev-minchur 님의 블로그
Apache Kafka란? (2) 본문

Kafka란?
Kafka는 실시간 데이터 스트리밍을 위한 분산 플랫폼으로, 대량의 데이터를 빠르게 처리하는 데 최적화되어 있습니다. 메시지 큐와 비슷한 기능을 가지지만, 데이터 스트림을 저장하고 분석하는 데 더욱 중점을 둡니다. 쉽게 말해, 다양한 데이터 소스를 실시간으로 연결하여 데이터를 처리하고 분석하는 도구라고 할 수 있습니다.
Kafka의 역할
- 실시간 데이터 처리 : 대량의 데이터를 빠르게 수집하고 분석할 수 있다.
- 데이터 통합 : 여러 출처에서 데이터를 모아 하나의 플랫폼에서 분석할 수 있다.
- 내결함성 : 데이터 손실 없이 안정적으로 데이터를 저장하고 전송하는 것이 가능하다.
장점과 단점
- 장점
- 신뢰성: 데이터 복제 기능 덕분에, 여러 브로커에 데이터를 저장하여 장애 발생 시에도 데이터 손실을 방지할 수 있다.
- 유연성: 여러 소비자가 동시에 데이터를 구독할 수 있으며, 다양한 언어로 클라이언트를 사용할 수 있다.
- 확장성: 클러스터링을 통해 여러 노드에서 데이터를 분산 처리하고, 필요에 따라 쉽게 브로커와 파티션을 추가할 수 있다.
- 성능: 대량의 데이터를 실시간으로 빠르게 처리할 수 있어, 데이터 전송 지연을 최소화한다.
- 관리 및 모니터링: 다양한 도구를 통해 클러스터를 효과적으로 관리하고 모니터링할 수 있다.
- 단점
- 복잡한 설정 및 운영: 초기 설정이 복잡할 수 있고, 대규모 환경에서는 추가적인 설정이 필요하다.
- 성능 문제: 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있으며, 대규모 메시지를 처리할 때 성능 저하가 발생할 수 있다.
- 운영 비용: 메모리와 CPU 리소스를 많이 소모하여, 충분한 리소스를 제공해야 원활한 운영이 가능하다.
- 러닝 커브: Kafka의 개념과 설정을 이해하는 데 시간이 걸릴 수 있으며, 처음에는 다소 어려울 수 있다.
Kafka의 기본 구성 요소
메시지(Message)
메시지는 Kafka에서 전달되는 데이터의 기본 단위로, 로그 데이터나 이벤트 데이터를 포함한다. 각 메시지는 키, 값, 타임스탬프 및 메타데이터로 구성된다.
프로듀서(Producer)
프로듀서는 메시지를 생성하여 Kafka에 전송하는 역할을 한다. 예를 들어, 웹 애플리케이션이 로그 데이터를 Kafka로 보내는 경우 프로듀서 역할을 한다. 특정 토픽에 메시지를 전송한다.
토픽(Topic)
토픽은 메시지를 저장하는 장소로, 메시지는 특정 토픽에 저장된 후 소비자에게 전달된다. 각 토픽은 여러 파티션으로 나눌 수 있으며, 각 파티션은 메시지를 순서대로 저장한다. 예를 들어, "user-activity"라는 토픽에 사용자의 활동 로그를 저장할 수 있다.
파티션(Partition)
파티션은 토픽을 물리적으로 나눈 단위로, 각 파티션은 독립적으로 메시지를 저장하고 관리한다. 각 파티션 내의 메시지는 고유한 오프셋으로 식별되어, 데이터의 병렬 처리가 가능한다.
키(Key)
키는 메시지를 특정 파티션에 할당하는 데 사용되는 값이다. 동일한 키를 가진 메시지는 항상 동일한 파티션에 저장되죠. 예를 들어, 특정 사용자 ID를 키로 사용하면 해당 사용자의 모든 이벤트가 동일한 파티션에 저장된다.
컨슈머(Consumer)
컨슈머는 토픽에서 메시지를 가져와 처리하는 역할을 한다. 각 컨슈머는 특정 컨슈머 그룹에 속하며, 같은 그룹에 속한 컨슈머들이 토픽의 파티션을 분산 처리한다. 기본적으로 특정 컨슈머가 특정 파티션에서 계속 데이터를 처리한다.
브로커(Broker)
브로커는 Kafka 클러스터의 각 서버로, 메시지를 저장하고 전송하는 역할을 한다. 하나의 Kafka 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽 파티션을 관리한다.
주키퍼(Zookeeper)
주키퍼는 Kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스이다. 주키퍼는 브로커의 메타데이터를 저장하고, 브로커 간의 상호작용을 조정한다.
Kafka와 RabbitMQ의 차이점
설계 철학
- RabbitMQ: 전통적인 메시지 브로커로, 메시지의 안정적 전달과 큐잉에 중점을 둔다.
- Kafka: 대규모 실시간 데이터 스트림의 저장과 분석에 중점을 둔다.
메시지 모델
- RabbitMQ: 큐를 중심으로 메시지를 전달하며, 메시지는 큐에 저장된 후 하나 이상의 컨슈머에게 전달된다.
- Kafka: 토픽을 중심으로 메시지를 저장하며, 메시지는 토픽의 파티션에 저장되고, 컨슈머는 이 파티션에서 메시지를 읽는다.
메시지 지속성
- RabbitMQ: 메시지를 메모리나 디스크에 저장할 수 있으며, 일반적으로 단기 저장을 목표로 한다.
- Kafka: 메시지를 디스크에 저장하며, 장기 저장을 목표로 합니다. 데이터 로그는 설정된 기간 동안 보존된다.
사용 사례
- RabbitMQ: 작업 큐, 요청/응답 패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합하다.
- Kafka: 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합하다.
'Kafka' 카테고리의 다른 글
| Topic, Partition, Segment란?? (0) | 2025.01.07 |
|---|---|
| MSA환경에서 Kafka 실습하기 (1) (0) | 2025.01.07 |
| Apache Kafka란? (1) | 2025.01.07 |
| ELK란?? (0) | 2025.01.06 |