Apache Kafka는 분산 메시징/스트리밍 플랫폼 입니다.
Kafka는 초당 수십만 건 이상의 메시지를 처리 가능하고, 여러 Broker를 통해 분산처리가 가능합니다. 또한, 메시지를 디스크에 저장하고 유실된 메시지를 요청을 한번 더 보내는 큐도 존재하면서 장애 발생 시에도 데이터 유실을 방지 할 수 있고, 한 메시지를 여러 Consumer 그룹이 독립적으로 읽을 수 있습니다.
Kafka 주요 개념
1. Producer
- 메시지를 Kafka에 Publish 즉, 발행을 하는 주체이다.
- 특정 Topic에 메시지를 보낸다.
- 메시지는 JSON 등 여러가지 Payload 형태로 전송이 가능하다.
2. Topic
- 메시지가 모이는 구분 단위이다.
3. Partition
- Topic을 쪼갠 단위이며, topic내에서 여러 Partition으로 나누어 consumer에게 메시지를 전송할 때, 병렬 처리가 가능합니다.
4. Broker
- Topic(partition 들)을 포함한 서버입니다.
- Broker들이 모여서 Kafka 클러스터를 형성합니다.
5. Consumer
- 메시지를 전달받는 주체입니다.
- 여러개의 partition을 개별 조회하면서 메시지를 받게 됩니다.
- Consumer Group 단위로 관리가 되는데 같은 Group 안에서는 메시지가 중복되지 않도록 분배합니다.
6. Offset
- Partition 안에서 인덱스라고 보면 됩니다.
- 이 offset이라는 번호를 통해 Consumer가 어디까지 메시지를 조회했는지 알 수 있습니다.
Kafka 데이터 파이프라인 시퀀스
1. 메시지 생산 (Producer)
- Producer가 메시지를 보낼 때, Topic과 key를 같이 보냅니다.
- Kafka는 key를 해싱해서 특정 Partition을 선택합니다. 만약 partition이 하나인경우 그대로 저장됩니다.
2. 메시지 저장 (Broker)
- 선택된 Partition의 log 파일 끝에 append 됩니다.
- 메시지마다 Offset이 붙으며 들어온 순서대로 증가합니다.
3. 메시지 소비 (Consumer Group)
- Consumer들이 모인 Consumer Group이 Partition들을 나눠서 담당하여 메시지를 조회합니다.
- 여러 Partition 한 Consumer가 맡을 수 있으므로 무조건 Partition개수는 Consumer개수보다 같거나 많아야 합니다,.
4. 메시지 재처리 전략
- kafka의 가장 큰 특징은 메시지를 소비해도 바로 삭제되지 않고 log에 일정 기간 보존된다. 이를 이용해서 재처리가 가능하다.
- 만약 처리 실패 시, consumer을 재시작 시 같은 메시지를 다시 읽을 수 있다.
- Consumer가 조회 실패시 사용하는 처리 실패 Topic을 따로 만들어 두는 방법도 있다.
Kafka vs RabbitMQ
- Kakfa는 “모든 데이터를 로그(Log) 로 남겨두고, 필요한 Consumer가 언제든 읽어간다.”
- RabbitMQ는 “메시지를 큐(Queue) 에 넣고, Consumer가 가져가면 삭제한다.”
구분 | Kafka | RabbitMQ |
철학 | 모든 이벤트를 로그(Log) 로 저장, 여러 Consumer가 필요할 때 읽음 | 메시지를 큐(Queue) 에 넣고 소비되면 삭제, 실시간 전달 중심 |
저장 방식 | Partition Log에 Append-only로 디스크 저장, Retention 기간 동안 보존 | Queue에 저장 → Ack 후 삭제, 기본적으로 재처리 불가 |
메시징 모델 | Topic → Partition → Consumer Group (Group마다 전체 데이터 구독 가능) | Exchange → Queue → Consumer (Exchange 타입에 따라 라우팅) |
순서 보장 | Partition 단위 순서 보장 (Key 기반으로 같은 Partition에 들어가야 순서 유지) | Queue 단위 순서 보장 (하지만 병렬 처리 시 깨질 수 있음) |
확장성/성능 | Partition 수평 확장 → 초당 수십만 건 이상 처리 가능 | 단일 Queue 성능은 Kafka보다 낮음 (초당 수만 건 수준) |
전달 보장 | At-most / At-least / Exactly once 모두 지원 | At-most / At-least once 지원 (Exactly once는 직접 구현 필요) |
사용 사례 | 로그 수집, 이벤트 스트리밍, 대규모 채팅, 데이터 파이프라인 | 작업 큐(Job Queue), 알림 발송, 소규모 결제 처리, 백그라운드 태스크 |
'Interview Question' 카테고리의 다른 글
[Interview Question] 프로젝트를 진행하면서 어려웠던 점? (0) | 2025.09.16 |
---|---|
[Interview Question] API Gateway란 무엇인가? (0) | 2025.09.16 |
[Interview Question] Docker를 써본 경험이 있나요? 컨테이너 vs VM 차이는 무엇인가요? (0) | 2025.09.04 |
[Interview Question] 서버 로그를 확인하고 장애를 추적하는 방법을 설명해보세요. (0) | 2025.09.04 |
[Interview Question] 캐시(Cache)는 왜 사용하나요? (0) | 2025.09.04 |