Apache Kafka?
Kafka는 2011년 링크드인에서 실시간 데이터 피드를 관리하기 위해 개발한 이벤트 스트리밍 플랫폼이다.
Kafka는 고성능 분산 스트리밍 플랫폼으로, 분당 수십억개의 스트리밍 이벤트를 처리 할 수 있다.
카프카의 핵심 기능
- 애플리케이션에서 데이터 또는 이벤트 스트림을 게시(publish)하거나 구독(subscribe to)할 수 있음
- 원하는 기간 동안 스트림을 내구적이고 신뢰성 있게 저장 할 수 있음
- 데이터를 생성 즉시 실시간 처리 할 수 있으며, 순서를 보장함
카프카 구조
- 브로커 (Broker):
- 카프카 클러스터의 핵심 구성 요소로, 메시지들을 저장하고 처리하는 노드
- 여러 대의 브로커로 구성된 클러스터를 형성하여 데이터를 분산 저장하고 처리
- 토픽 (Topic):
- 메시지들을 논리적으로 분류하는 단위
- 토픽은 카프카에 저장되는 메시지들의 주제나 카테고리를 나타냄
- 파티션 (Partition):
- 토픽의 물리적인 저장 단위로, 각 토픽은 여러개의 파티션으로 나누어짐
- 파티션은 여러 브로커에 복제되어 저장됨
- 파티션은 메시지의 순서를 보장하고, 병렬 처리가 가능하도록 해줌
- 프로듀서 (Producer):
- 메시지를 생성하고 카프카에 특정 토픽으로 전송하는 역할
- 프로듀서는 메시지를 전송할 때, 특정 파티션을 지정 가능. 지정하지 않고 라운드로빈 방식도 지원
- 컨슈머 (Consumer):
- 카프카에서 메시지를 수신하여 처리하는 역할
- 여러 개의 컨슈머 그룹으로 구성되며, 각 그룹은 특정 토픽의 파티션을 소비
- 컨슈머 그룹 (Consumer Group):
- 하나 이상의 컨슈머로 구성되는 논리적 그룹
- 같은 컨슈머 그룹에 속한 컨슈머들은 특정 토픽의 파티션을 분산하여 소비
- 주키퍼 (ZooKeeper):
- 카프카 클러스터의 구성 정보와 상태 정보를 관리하는 분산 코디네이션 서비스
- 주키퍼는 브로커들의 상태를 추적하고, 토픽과 파티션의 메타데이터를 저장하며, 리더 선출 등 카프카 클러스터의 관리 역할을 담당
- Kafka에서는 Zookeeper에 대한 의존성을 제거하고자, Zookeeper 없이 카프카 내에서 메타데이터를 관리하는 KRaft 모드를 제공한다. (Production으로는 Kafka 3.3 version 이후 부터)
https://developer.confluent.io/learn/kraft/
카프카 작동방식
아래의 4가지 API를 통해 Kafka 기능을 활용할 수 있음
- Producer API(게시): 데이터 소스에서 데이터 이벤트 스트림을 하나 이상의 Kafka 토픽에 게시
- Consumer API(소비): 어플리케이션에서 하나 이상의 토픽을 구독하고, 데이터를 가져와 결과 데이터 스트림을 처리. 실시간 데이터 뿐만 아니라 과거의 레코드를 구독하고 처리 할 수 있음
- Streams API(처리): Producer와 Consumer API를 기반으로 복잡한 처리 기능을 추가. 토픽에서 데이터를 소비하고 분석, 집계, 변환 등의 처리과정을 거쳐 생성된 스트림을 동일한 토픽 혹은 다른 토픽으로 게시.
- Connector API(연결): 재사용 가능한 생산자 또는 소비자 연결. 개발자가 커넥터를 빌드 할 수 있으며, BigQuery등 주요 서비스에 대한 수백 개의 기존 커넥터가 존재.
카프카 Use Case
- Messaging: 카프카는 메세지 브로커로써, 높은 처리량, 내장된 파티셔닝, 복제 및 내결함성을 제공하여 대규모 메세지 처리 어플리케이션에 좋은 솔루션으로 사용됨
- Website Activity Tracking: 카프카의 최초 use case. 사용자 활동 트래킹 파이프라인을 pub/sub 피드의 set으로 구축. 게시된 활동 피드는 실시간 처리, 실시간 모니터링, Hadoop 또는 데이터 웨어하우스에 적재 등의 유스케이스에 사용 됨
- Metrics: 운영 모니터링에 사용. 분산된 응용 어플리케이션의 메트릭 정보를 중앙화함
- Stream Processing: 입력 데이터 필터, 조인, 집계 또는 기타 변환 작업을 실시간으로 처리
- 이 외에도, 로그 수집, 이벤트 소싱 등에 사용됨
Why Kafka?
- 높은 확장성: 카프카 클러스터를 수천 개의 브로커, 하루에 수조 개의 메시지, 페타바이트 규모의 데이터, 수십만 개의 파티션까지 확장 가능
- 높은 가용성: 카프카는 가용성 영역 내에서 효율적으로 클러스터를 확장하거나 지리적으로 분산된 지역에 걸쳐 클러스터를 연결하여 높은 가용성과 내결함성을 제공. 이로 인해 카프카는 데이터 손실의 위험 없이 안정적으로 운영 됨.
- 실시간 처리: 카프카는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 처리를 지원. 대용량의 메세지를 분산처리를 통해 2ms와 같이 낮은 지연시간으로 처리.
- 높은 처리량: 카프카는 고속 및 대용량 데이터를 처리 가능 하며, 초당 수백만 개의 메시지를 처리.
- 영속성: 카프카는 데이터를 파일시스템에 저장하며, 페이지 캐시 영역을 사용하여 속도를 보완. 파일시스템에 저장되므로 시스템이 종료되더라도 데이터는 사라지지 않음.