여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템
메시지 생산자이며 브로커에 메시지를 보내는 애플리케이션
메시지 수집/전달하는 서비스
브로커에서 메시지를 취득하는 애플리케이션
카프카에서 다루는 데이터의 최소 단위
카프카가 중계하는 로그의 한 줄 한줄과 센서 데이터 등이 이에 해당
메시지는 key 와 value를 갖게 되며 나중에 언급할 메시지 전송할 때 파티셔닝에 이용
메시지를 토픽별로 관리하는 스토리지.
브로커에 배치되어 관리.
프로듀서와 컨슈머는 특정 토픽을 지정하여 메시지를 송수신함으로써 단일 카프카 클러스터에서 여러 종류의 메시지를 중계
Producer는 메시지를 생성하고 Kafka 브로커에 전송하는 역할
Kafka 클러스터는 여러 개의 Broker(서버)로 구성
토픽과 파티션 관리
- 하나의 Topic은 여러 개의 Partition으로 구성됨
- 특정 Partition의 메시지는 Leader Broker가 관리하고, 다른 Broker들이 복제(Replica)하여 백업함
- Partition 개수가 많을수록 병렬 처리 성능이 향상됨
리더와 팔로워(Leader-Follower) 구조
- 각 Partition은 Leader Broker가 관리하고, 다른 Broker는 Follower로 동작
- Leader가 장애가 나면 Follower 중 하나가 새로운 Leader로 승격됨
메시지 보관 및 로그 관리
- 메시지는 로그(Log) 형태로 저장되며, 설정된 보관 시간(예: 7일)이 지나면 삭제됨
- Consumer가 메시지를 읽어도 데이터는 사라지지 않음
Consumer는 Kafka에서 메시지를 가져가서 처리하는 역할
Consumer Group을 사용한 병렬 처리
- 여러 개의 Consumer가 같은 Topic을 읽을 때, Consumer Group을 사용하면 Partition을 자동으로 분배함
- 한 Partition은 하나의 Consumer에게만 할당됨
Offset을 이용한 메시지 읽기 관리
- Kafka는 Consumer의 읽은 위치를 Offset으로 저장함
- Offset을 관리하여, 특정 지점부터 다시 읽을 수도 있음
- 자동 커밋을 활성화하면 일정 주기마다 Offset이 자동 저장됨
Zookeeper는 Kafka 클러스터를 관리하는 역할
✅ 장점
고성능 (High Throughput)
분산 구조와 배치 처리 방식으로 초당 수백만 건 이상의 메시지를 처리 가능
확장성 (Scalability)
브로커와 파티션을 추가하여 쉽게 성능을 확장할 수 있음
내결함성 (Fault Tolerance)
데이터 복제를 통해 장애 발생 시에도 데이터 유실 없이 운영 가능
유연한 데이터 처리
실시간 스트리밍뿐만 아니라 배치 처리도 가능.
Apache Flink, Spark 등과 연동하여 데이터 분석 및 실시간 모니터링 가능
❌ 단점
초기 설정 및 운영 복잡성
클러스터 구성 및 Zookeeper 설정이 복잡하며, 운영에 대한 이해가 필요함
메시지 순서 보장 어려움
같은 파티션 내에서는 순서가 보장되지만, 여러 파티션을 사용할 경우 순서가 보장되지 않을 수 있음
소규모 시스템에 부적합
대규모 분산 환경에서 최적화된 아키텍처이므로, 작은 규모의 시스템에서는 과도한 리소스 사용이 발생할 수 있음