
Apache Kafka
- 2011년, LinkedIn에서 개발 후 Apache 오픈소스로 공개
- 데이터 파이프라인의 확장, 기종 간의 호환성, 고성능 기반의 스트림 데이터 처리의 문제 해결을 위해 개발
- 실시간 스트리밍 데이터 수집, 처리하는 데 최적화된 분산 데이터 스토어

개발 배경
과거 링크드인 시스템 구성도

- 엔드투엔드(end-to-end) 연결 방식의 아키텍처
- 데이터가 출발지에서 목적지까지 직접적으로 이동
- 이러한 end-to-end 방식은 아키텍처가 거대해지고, 소스 어플리케이션과 타겟 어플리케이션을 연결하는 파이프라인의 개수가 많아지면서 문제가 발생.
Kafka 도입 후 링크드인 시스템 구성도

- Pub/Sub 방식 : 중앙에 메시징 시스템 서버를 두고 Publisher(게시자)가 topic에 메시지를 보내면, 해당 topic을 구독해놓은 Subscriber(구독자) 모두에게 메시지가 전송되는 방식
- Producer와 Consumer가 서로 분리되어 높은 확장성을 달성
주요 기능
- Pub-Sub Model을 지원하는 분산 메시지 큐
- 애플리케이션 데이터 또는 이벤트 스트림 게시 및 구독
- 여러 대의 서버로 클러스터를 구성
- 장애가 발생하더라도 안전한 방식으로 정확히 레코드 저장
- 생성된 레코드 순차적으로 실시간 처리
장점
확장성
- 파티셔닝된 로그 모델 사용 시, 데이터를 여러 서버에 분산할 수 있어 단일 서버에 담을 수 있는 수준 이상으로 데이터 확장 가능
신속함
- 데이터 스트림을 분리해, 지연 시간이 매우 짧아 속도가 극도로 빠름
내구성
- 파티션은 여러 서버에 분산되어 복제되며 데이터는 모두 디스크에 기록됨
- 서버 장애로부터 데이터가 보호되어 내결함성과 내구성 높일 수 있음
Kafka 구성 요소

Producer
- Kafka에 이벤트(메시지)를 발행하는 역할.
Consumer
- Producer가 발행한 이벤트(메시지)를 구독해서 읽고 처리.
Kafka/Kafka Cluster
- 하나 이상의 Broker 서버로 구성된 클러스터.
Broker
- Kafka 애플리케이션이 설치되어 있는 서버 또는 노드
- 여러 Topic을 갖고 있는 컨테이너로, 서버 내부에 이벤트(메시지)를 저장하고 관리하는 역할
Zookeeper
- 카프카의 메타데이터 관리 및 브로커의 정상 상태 점검을 담당
Event
- Kafka에서 Producer와 Consumer가 데이터를 주고 받는 단위
Topic, Partition, Offset


Topic
- 이벤트(메시지) 구분 단위. (→ 쉽게 생각하면 Topic은 파일 시스템의 폴더, 이벤트는 해당 폴더의 파일)
- 여러 개의 파티션으로 구성
Partition
- 병렬 처리 및 고성능을 얻기 위해 하나의 Topic을 여러 개로 나눔
- Topic을 생성하면 카프카가 자동적으로 Partition들을 Broker에 분배
Offset
- 파티션 내에서 고유하고, 순서 정보를 가진 식별자.
- Partition의 Event마다 할당된다.
출처
'데이터엔지니어링' 카테고리의 다른 글
[데이터엔지니어링] Docker 개념 (2) | 2024.05.03 |
---|---|
[데이터엔지니어링] Apache Kafka Connect 설명 (2) | 2024.04.13 |
[데이터엔지니어링] Airflow 실습(2) - Airflow 간단 설명 (1) | 2024.01.28 |
[데이터엔지니어링] Airflow 실습(1) (0) | 2023.11.29 |
[데이터엔지니어링] PuTTY를 이용해 Window에서 EC2 접속하기! (0) | 2023.11.28 |