Kafka?
- 분산형 메시지 브로커 시스템으로, 실시간 데이터 스트리밍, 로그 수집, 이벤트 처리 등에 사용
- Scalability와 Fault Tolerance를 제공하는 Publish-Subscription 메시징 시스템
- High Throughput과 Low Latency 실시간 데이터 처리에 맞게 구현됨
- 분산 아키텍처를 따르기 때문에 Scale Out 형태로 스케일 조정 가능
특징
- 분산 시스템
- 여러 브로커(서버)로 구성된 클러스터에서 작동
- 데이터의 복제와 분산 처리를 통해 안정성과 확장성을 보장
- 스트림 처리
- 실시간 스트림 처리를 목표로하는 서비스
- ksqlDB를 통해 SQL로도 실시간 이벤트 데이터 처리 가능
- 토픽 기반 메시징
- 데이터는 논리적 파이프라인인 토픽에 저장되며, 프로듀서가 토픽에 데이터를 게시하면 컨슈머가 구독
- 메시지 지속성
- Kafka는 데이터를 디스크에 영구 저장하며, 데이터의 유지 기간 설정 가능
- 데이터의 크기 등 다른 옵션을 통해 저장 설정 가능
- High Throughput
- 초당 수백만 건의 메시지를 처리할 수 있도록 설계
- 배치 처리와 압축된 데이터 전송을 통해 네트워크 및 디스크 I/O 최적화
- 확장성
- 클러스터에 브로커를 추가하거나 파티션을 늘려 성능을 쉽게 확장 가능
- Fault Tolerance(내결함성)
- 데이터 복제 및 분산 커밋 로그 기능을 제공하여 장애 대응이 용이
- 데이터 복제 및 분산 커밋 로그 기능을 제공하여 장애 대응이 용이
아키텍쳐
Kafka 데이터 흐름
- Producer → Broker
- 프로듀서는 토픽을 지정해 데이터를 Kafka 브로커로 전송
- 브로커는 데이터를 해당 토픽의 파티션에 저장
- Partition 관리 및 복제
- 데이터는 파티션에 기록되며, 리더 브로커가 이를 관리
- 팔로워 브로커는 리더 데이터를 복제하여 장애 대비
- Broker → Consumer
- 컨슈머는 특정 토픽을 구독하여 데이터를 읽음
- 오프셋(Offset)을 기반으로 데이터를 순차적으로 처리
- 컨슈머 그룹 및 병렬 처리
- 동일한 컨슈머 그룹 내에서 각 컨슈머는 특정 파티션만 처리
- 병렬 처리를 통해 높은 처리량 제공
Producer
- 데이터를 생성하여 Kafka로 전송하는 클라이언트 애플리케이션
- 데이터를 Topic으로 보내며, 특정 파티션에 데이터를 할당
- 데이터는 압축을 통해 전송 가능하여 네트워크 효율성 향상
Broker
- Kafka 클러스터를 구성하는 서버 노드
- 각 브로커는 클러스터 내에서 고유 ID를 가지며, 특정 파티션 관리
- 데이터를 디스크에 저장하며, Consumer의 요청 시 데이터 제공
- 주요 역할
- 메시지 저장
- 클러스터 메타데이터 관리 (리더 브로커)
- 데이터 복제 관리
Topic
- 데이터를 저장하는 논리적 파이프라인 -> 데이터 이벤트 스트림
- 여러 Partition으로 나뉘며, 각 Partition은 클러스터의 여러 브로커에 분산 저장
- 데이터는 토픽 단위로 관리되며, 토픽 내 데이터는 로그 형태로 저장
- 다수의 Consumer가 같은 Topic을 기반으로 읽는 작업이 가능
- 메시지는 Offset 번호로 구분
- Message(Event)
- Kafka에서 데이터의 최소 단위
- 최대 1MB
- Header, Key, Value, Timestamp로 구성
- Header : 선택적 구성요소로 경량 메타 데이터 정보
- Key, Value : 비지니스 관련 데이터를 가지며, Key는 이후 Topic 데이터를 나눠서 저장할 때 사용
- Timestamp : 일반적으로 데이터가 Topic에 추가된 시점
Partition
- 토픽의 물리적 단위
- 하나의 파티션은 Fail-over를 위해 Replcation Partition을 가짐
- 데이터가 여러 파티션에 분산 저장되므로 병렬 처리와 확장성 제공
- 특정 파티션 내에서는 데이터 순서 보장, 하지만 여러 파티션 간에는 순서 보장 X
- 각 파티션에는 리더와 팔로워가 있으며, 리더가 데이터 쓰기 요청 처리
Consumer
- Kafka에서 데이터를 읽는 클라이언트 애플리케이션
- 특정 Topic을 구독(Subscribe)하고 데이터 처리
- Consumer Group
- 여러 컨슈머가 그룹을 형성해 파티션을 병렬로 처리
- 각 파티션은 하나의 컨슈머에게만 할당됨
Controller
- Kafka 클러스터 메타데이터를 관리하는 분산 코디네이터
- 클러스터 내 브로커 상태, 파티션 리더 정보, 컨슈머 오프셋 등을 관리
- 기존 Controller는 Zookeeper를 사용했으며, Kafka 2.8.0부터 Kafka Raft Controller(KRaft)로 대체 중
- Zookeeper 모드
- 3, 5, 7대의 서버를 Zookeeper Esemble을 구성하기 위해 사용
- Controller가 Zookeeper를 통해 메타데이터 관리와 리더 선출 담당
- 하나의 Controller 존재
- KRaft 모드
- Zookeeper를 완전히 배제 -> 다수의 Controller가 해당 역할 수행
- Controller는 보통 Broker
- Zookeeper 모드
Replication
- 데이터 복제를 통해 내구성과 가용성 보장
- 각 파티션은 하나의 리더와 여러 개의 팔로워(복제본)을 가짐
- 리더 브로커가 모든 읽기/쓰기 요청을 처리하며, 팔로워는 설정에 따라 읽기 요청까지 처리 가능
- 팔로워는 리더 데이터를 복제
'데이터 > Kafka' 카테고리의 다른 글
[Kafka] 2. Partition & Segment (0) | 2024.12.05 |
---|