Kafka 기본 개념
Apache Kafka는 대규모 데이터 스트리밍을 처리하는 분산 메시지 브로커로,
높은 처리량, 확장성, 내결함성이 특징이며, 주로 로그 수집, 이벤트 스트리밍,
비동기 메시징, 데이터 파이프라인 구축 등 많은 곳에서 사용됩니다.
Kafka의 핵심 요소
1. Producer (생산자)
데이터를 Kafka Topic에 게시하는 역할
- Producer는 동시에 다수 존재 가능
- 비동기 방식으로 메시지 전송 가능
- 데이터를 특정 Partition에 기록
- acks 설정을 통해 메시지 전송의 안정성을 조정 가능
- acks=0 : 메시지를 보내고 확인 응답을 기다리지 않음. (가장 빠르지만 낮은 안정성)
- acks=1 : 리더(Leader) 파티션이 메시지를 받으면 응답. (일반적인 설정)
- acks=all : 모든 팔로워(Follower) 노드가 복제한 후 응답. (가장 안전하지만 느릴 수 있음)
2. Broker (중앙 서버)
메시지를 저장하고 관리하는 역할
- Kafka 클러스터를 구성하는 노드(서버)로, 여러 개의 Broker로 구성 가능
- 각 Broker는 특정 Topic의 Partition 관리
- 장애가 발생하면 다른 Broker가 데이터를 관리하도록 복제(replication)
- ++ Broker들은 Zookeeper를 통해 클러스터 상태를 관리하고 조정
클러스터
여러 대의 컴퓨터(서버)를 하나의 시스템처럼 동작하도록 구성한 집합으로,
하나의 작업을 여러 개의 노드(Node)가 분산 처리하는 구조.
3. Consumer (소비자)
Topic에서 데이터를 읽어오는 역할
- 하나의 Topic을 여러 Consumer가 동시에 읽기 가능
- Consumer Group을 활용해 메시지를 분산 처리 가능
- 오프셋(Offset)을 관리하여 어디까지 읽었는지 추적 가능
4. Topic (메시지 채널)
Producer와 Consumer가 데이터를 주고받는 논리적인 단위
- 하나의 Topic은 여러 개의 Partition으로 나뉘며,
++ 각 Partition은 독립적으로 메시지 저장
- Kafka는 메시지를 로그(log) 파일 형태로 저장,
일정 기간이 지나면 자동으로 삭제 가능.
5. Partition (데이터 분할 단위)
하나의 Topic이 여러개로 나뉘어 저장된 단위
- Partition을 사용하여 Kafka의 병렬 처리 성능 향상 가능
- Partition마다 리더(Leader)와 팔로워(Follower)가 존재,
리더가 주로 데이터를 처리하고, 팔로워가 백업 역할을 수행
- 특정 키(Key)를 기반으로 데이터를 특정 Partition에 할당 가능
6. Offset (메시지 위치)
Kafka가 메시지를 Offset을 기준으로 관리
- Offset은 각 Partition 내에서의 메시지 위치를 나타내는 숫자로,
새로운 메시지가 추가될 때마다 증가
- Consumer는 Offset을 기준으로 메시지를 읽고,
어디까지 읽었는지 체크 가능