Kafka란?
Kafka는 분산 메시징 시스템으로, 고가용성과 유연함을 갖춘 이벤트 스트리밍 플랫폼입니다.
대규모 데이터를 빠르고 안정적으로 처리할 수 있도록 설계되었으며, 메시지를 생산하고 소비하는 서비스들이 Kafka를 통해 데이터를 주고받습니다.
Kafka의 핵심 개념과 구조를 이해하기 위해 주요 구성 요소들을 하나씩 살펴보겠습니다.
Kafka의 핵심 구성 요소
1. Broker
Kafka의 실제 서버로, 메시지를 저장하고 관리하는 역할을 합니다.
- Producer가 보낸 메시지를 받아 저장합니다.
- Consumer가 메시지를 읽을 때, 적절한 메시지를 찾아 제공합니다.
- 저장된 메시지는 Offset을 기반으로 관리되며, Consumer는 이 Offset을 이용해 메시지를 순서대로 읽을 수 있습니다.
2. Partition
Kafka에서 하나의 Topic 은 여러 개의 Partition 으로 나뉘며, 각 파티션은 메시지를 저장하는 단위입니다.
- 하나의 Topic은 여러 개의 Partition으로 구성될 수 있으며, 데이터가 분산 저장됩니다.
- 이를 통해 병렬 처리 성능을 향상시킬 수 있습니다.
예를 들어, 하나의 Topic이 있을 때,
- Leader Partition 1
- Follower Partition 2, 3
이렇게 여러 개의 Partition이 존재할 수 있습니다.
3. Leader & Follower
Kafka는 고가용성을 보장하기 위해 각 Partition에 대해 Leader와 Follower를 유지합니다.
- Leader
- Consumer가 데이터를 읽을 때 Leader Partition에서만 읽을 수 있습니다.
- 즉, 메시지의 주요 저장소 역할을 합니다.
- Follower
- Leader Partition의 데이터를 복제하여 백업 역할을 합니다.
- 만약 Leader가 장애로 인해 다운되면, Follower 중 하나가 새로운 Leader가 됩니다.
- 이를 통해 Kafka는 높은 가용성과 안정성을 유지할 수 있습니다.
4. Role Broker
Kafka 클러스터에는 여러 개의 Broker 가 존재하며, 각 Broker는 특정 역할을 담당합니다.
- Controller
- Broker들의 상태를 모니터링하며, Leader Partition을 관리하는 역할을 합니다.
- 장애가 발생하면 새로운 Leader를 선출하여 안정성을 유지합니다.
- Coordinator
- ConsumerGroup을 모니터링하고, Rebalancing 작업을 수행합니다.
- Rebalancing
- Consumer가 추가되거나 제거될 때, 데이터 소비를 자동으로 조정하는 과정입니다.
Kafka는 이러한 자동화된 역할 분배를 통해 고가용성과 안정성을 유지합니다.
5. Zookeeper
Kafka는 메타데이터 관리를 위해 Zookeeper를 사용합니다.
- Topic과 Partition 정보 관리
- Broker 정보 관리
- Kafka 클러스터 상태 감시
그러나 Kafka 2.8 버전 이후부터는 Zookeeper를 대체하는 KRaft(Kafka Raft) 구조가 도입되었습니다.
Kafka 메시지 흐름
1. Producer
- Producer는 Kafka Broker에 메시지를 보내는 역할을 합니다.
- 특정 Topic을 지정하여 메시지를 전송하며, Kafka는 이를 적절한 Partition에 저장합니다.
2. Consumer & ConsumerGroup
- Consumer는 Broker에서 메시지를 읽는 역할을 합니다.
- ConsumerGroup은 여러 Consumer로 이루어진 그룹으로, 같은 Topic의 데이터를 여러 개의 Consumer가 나누어 소비할 수 있습니다.
- 서로 다른 ConsumerGroup은 동일한 데이터를 읽을 수도 있습니다.
- 그러나 동일한 ConsumerGroup 내에서는 하나의 메시지를 하나의 Consumer만 소비합니다.
이를 통해 Load Balancing 이 가능하며, 대량의 데이터를 효과적으로 처리할 수 있습니다.
3. Offset
- Offset은 메시지의 위치를 추적하는 정보입니다.
- 각 Consumer는 자신의 Offset을 관리하여 어디까지 메시지를 읽었는지 기억할 수 있습니다.
- 이를 활용하면, Consumer가 중단되었다가 다시 시작하더라도 중복 없이 메시지를 읽을 수 있습니다.
Kafka가 제공하는 주요 기능
Kafka는 메시징 시스템뿐만 아니라 고성능 데이터 스트리밍 플랫폼으로 활용됩니다.
- 대용량 데이터 처리: 수백만 건의 메시지를 초당 처리할 수 있습니다.
- 분산 구조: 여러 대의 서버로 확장 가능하여 고가용성을 보장합니다.
- 데이터 복제: Follower Partition을 활용하여 데이터 유실을 방지합니다.
- Rebalancing: Consumer 수가 변경될 때 자동으로 데이터를 재분배합니다.
- Offset 기반 데이터 관리: 메시지를 중복 없이 정확하게 처리할 수 있습니다.
Kafka는 고가용성과 확장성을 갖춘 분산 메시징 시스템으로, 대용량 데이터를 안정적으로 처리할 수 있는 강력한 플랫폼입니다.
- Producer → Kafka Broker → Consumer
- Topic은 여러 개의 Partition으로 나뉘어 저장됨
- Leader & Follower 구조로 장애 발생 시 자동 복구
- ConsumerGroup을 활용해 부하를 분산하고, Rebalancing 기능으로 유연하게 데이터 소비 가능
Kafka를 사용한다면 수월하게 이벤트 기반 통신을 원활하게 구축할 수 있는 플랫폼이므로 이벤트기반 Application을 구축한다면 도입을 고민해 보면 좋을 플랫폼이라 생각합니다.
'Server' 카테고리의 다른 글
[VM] MAC OS에서 VM으로 Ubuntu 설치 및 실행하기 (3) | 2024.10.13 |
---|---|
[ Test ] Concert 장애 분석 및 대응 문서 (0) | 2024.08.21 |
[Event] @TransactionalEventListener 데이터가 저장 안 돼요... (0) | 2024.08.11 |
[EDA] 기존 서비스를 분석하고 Event를 활용하여 Transaction범위 분리 작업 (0) | 2024.08.07 |
대기열 성능 분석 및 Redis sorted set을 활용한 리펙토링 (0) | 2024.08.02 |