본문 바로가기
오픈소스/Kafka

[카프카] 기본 개념 소개

by sangyeon 2021. 10. 21.
728x90

오늘은 최근 핫한 오픈소스 제품이 "아파치 카프카"를 정리해보고자 한다.

 

* 아파치 카프카란?

아파치 카프카는 2011년 링크드인(LinkedIn)이라는 회사에서 개발해 오픈소스로 공개된 대용량 및 대규모 메세지 데이터를 빠르고 신속하게 처리하도록 개발"분산 메세징 플랫폼"이다.

최근 아파치 카프카는 빅데이터 분석 시, 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 데이터 파이프라인 구성시 주로 사용되고 있다. 결국 대용량 이벤트 스트림 처리를 위해 개발한 것이 아파치 카프카이다.

 

아파치 카프카의 도입 사례

- 이벤트(메시지)가 사용되는 모든 곳에서 사용한다고 생각하면 쉽다.

 

> Messaging System

> IOT 디바이스로부터 데이터 수집

> 애플리케이션에서 발생하는 로그 수집하여 분석 시스템으로 보내주는 역할

> Realtime Event Stream Processing(Fraud Detection, 이상감지)

> DB 동기화(MSA 기반의 분리된 DB간 동기화) 

   - CDC From DB via Kafka to Data Store

> Elastic, Spark, Hadoop과 같은 기술과 같이 사용하여 빅데이터 분석 및 데이터 수집

 

 

그렇다면 아파치 카프카는 왜 갑자기 뜨게 된 것일까?

 

카프카 이전의 메세지 처리 방식인 End To End 방식과 카프카의 Pub/Sub 구조를 비교한 아래 그림을 보면 이해가기 쉽다.

 

[Before Kafka]

그림1. 출처 - https://kouzie.github.io/kafka/아파치-카프카/#용어

위 그림에서 보는바와 같이, 카프카 이전의 End to End 연결방식의 아키텍처에서는

> 데이터 연동의 복잡성이 증가

> 각기 다른 데이터 파이프라인 연결 구조로 인한 코드의 복잡도 증가

> 확장에 엄청난 노력이 필요

 

End to End 방식은 큐를 통해 "보내는 사람"이 메세지를 전달하면 "받는 사름"은 큐에서 메세지를 사용하는 방식이다.

FIFO 큐처럼 "받는 사람은"은 모두 하나의 큐를 가지고 있으며 큐에 메세지가 들어오면 꺼내 읽게 된다.

위 그림 처럼 데이터전송 라인이 많아지면서 배포와 장애대응이 어려워졌으며 유지보수도 쉽지 않게 되었다.

 

 

[After Kafka]

그림2. 출처 - https://kouzie.github.io/kafka/아파치-카프카/#용어

카프카의 아키텍처는 "소스 어플리케이션"과 "타켓 어플리케이션" 사이에서 통합된 전송영역을 구축하여

> 프로듀서/컨슈머를 분리 (Publisher/Subscriber)

> 메세지 데이터를 여러 컨슈머에게 허용

> 높은 처리량을 위한 메시지 최적화

> 스케일 아웃 가능

> 관련 생태계 제공

 

카프카의 경우에 프로듀서와 컨슈머를 분리하고 토픽이라는 리소스를 통해 메세지를 전달한다.

즉, 프로듀서(Publisher)가  특정 토픽에 메세지를 보내면 해당 토픽을 구독한 모든 컨슈머(Subscriber)들에게 메세지가 전송된다.

(프로듀서와 컨슈머를 분리하여 높은 처리량이 가능해지고, 스케일아웃도 가능해졌다.)

 

 

End to End와 Pub/Sub 방식의 차이는 아래와 같다.

- End to End 방식은 메세지를 각각 1명의 Client만 받을 수 있지만 Pub/Sub 방식은 토픽을 구독한 모든 Client가 동일한 메세지를 받을 수 있다.

- End to End 방식은 메세지를 Client가 큐에서 꺼내 읽는 방식이지만, Pub/Sub 방식은 토픽에서 모든 구독 Client에게 통보(BroadCast)되는 방식이다.

 

참고로 위 구조를 이해하기 쉽게 만든 예시가 있다.

택배 서비스를 예시로 보면,

- End to End의 경우 모든 택배원들이 택배물건을 전달할 모든 주소(동/호수)를 알고 있어서 일일이 전달해야 한다.

- 그러나 Pub/Sub의 경우 모든 택배원들은 각각의 택배보관 장소(Topic)에 택배 물건을 놓으면 각각의 Client는 택배보관 장소(Topic)에서 물건을 찾아가면 된다.

 

 

다음 글에서는 아파치 카프카의 아키텍처와 구성요소에 대해 정리할 예정.

 

 

위 글은,

유튜브 데브원영님의 Apache Kafka 기본개념 동영상 강의와

https://pearlluck.tistory.com/288 님의 블로그 내용을 참고하여 정리하였습니다.

 

 

728x90