[Kafka]Kafka란?
이 글은 카프카, 데이터 플랫폼의 최강자 고승범/공용준 님의 책을 공부하며
정리하는 글입니다.
[Kafka]Kafka란?
Kafka에 대해서 알아보자
Kafka 란?
대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼 made by 링크드인
시간이 지날수록 링크드인의 서비스가 증가하면서, 비동기 작업은 많아지지만 메시지 큐를 확장시키는 데는 큰 어려움을 겪었다. 동기vs비동기
- 프로듀서와 컨슈머의 분리
- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머 에게 허용
- 높은 처리량을 위한 메시지 최적화
- 데이터가 증가함에 따라 스케일아웃(서버의 확장방법)이 가능한 시스템
Pub/Sub이란?
- 비동기 메시징 전송 방식으로, 발신자의 메시지에는 수신자가 정해져 있지 않은 상태로 방행(Publishin)하고, 구독(Subscribe)을 신청한 수신자만 정해진 메시지를 받을 수 있다.
일반적 형태의 통신 vs 기존 Pub/Sub모델 vs Kafka 차이점
- 일반적 형태의 통신의 경우 통신에 참여하는 개체가 많아질수록 서로 일일이 다 연결해야함
- 기존의 Pub/Sub 모델의 경우는 간단한 이벤트(kb 수준)를 전송하는데 사용 ex) mqtt
- 카프카의 경우에는 대규모 데이터(데이터 단건당 수MB)를 디스크에 저장하고 실시간 또는 나중에 전송을 가능하게 함.
- 나중에 나오겠지만 전부 디스크에 쓰는 것은 IO의 과부하를 줄 수 있음 그래서 성능 튜닝을 하기도 한다.
Kafka의 특징
- 멀티 프로듀서 멀티 컨슈머
- 카프카는 하나의 토픽 에 여러 프로듀서 또는 컨슈머들 이 접근이 가능하다
- 디스크에 메시지를 저장
- 기존 메시징 시스템과 가장 다른 특징
- 일반적인 메시징 시스템은 커슈머가 메시지를 읽으면 큐에서 바로 삭제
- 카프카는 정해진 보관 주기 동안 디스크에 메시지를 저장
- 트래픽 증가로 인한 장에에도 디스크 저장으로 인한 메시지 유실에 비교적 안전함
- 확장성
- 하나의 카프카 클러스터는 3대의 브로커로 시작해 수십 대의 브로커 확장이 가능
- 확장 작업은 카프카 서비스 중단 없이 가능하다 (6장)
- 높은 성능
- 고성능을 유지하기 휘해 내부적으로 분산처리 / 배치 처리 등 다양한 기법이 존재 (3장)
- 예를 들어서 하루에 1페타 바이트 이상의 데이터를 처리하는 링크드인!
Kafka 용어 정리
- 카프카: 아파치 프로젝트 애플리케이션 이름. 클러스터 구성이 가능하며, 카프카 클러스터라고 부른다
- 브로커: 카프카 애플리케이션이 설치되어 있는 서버나 노드를 말한다(kafka가 설치된 ec2)
- 토픽: 프로듀서와 컨슈머들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임. 나름의 규칙이 있다.
- 파티션: 변렬처리가 가능하도록 포픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해서 파티션의 수를 늘려줄 수 있다.
- 프로듀서: 메시지를 생산하는 자(서버 또는 애플리케이션)
- 컨슈머: 브로커의 토픽 이름으로 저장된 메시지를 가져가는 자(서버 또는 애플리케이션)
참고: 카프카, 데이터 플랫폼의 최강자 도서를 참고하고 있습니다(고승범님, 공용준 님)