ETC/Kafka

Kafka 개요 / 설치

seokhyun2 2020. 7. 19. 21:43

자연어처리만 하다가, 최근에는 회사에서 개발한 자연어처리 기술을 활용하는 서비스를 개발하는 역할도 맡게 되면서, 메시징 큐에도 관심이 생겨서 여러가지 찾다보니 카프카라는 것을 알게 되었습니다.

그래서 카프카에 대해서 한번 알아보고자 합니다. 

1. 카프카란?

카프카는 대용량의 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼으로 링크드인에서 출발해, 2011년 초 아파치 공식 오픈소스로 등록되었으며 현재는 넷플릭스, 에어비앤비, 마이크로소프트, 카카오 등에서 데이터 파이프 라인으로 사용되고 있습니다.

 

 

카프카 개발 전의 링크드인 시스템 구조(출처: https://www.confluent.io/blog/event-streaming-platform-1/)

위 그림은 카프카 개발 이전의 링크드인 시스템 구조입니다. 링크드인의 시스템이 커지면서, 동일한 메시지를 여러 곳에 보내줘야하고 점점 연결이 많아져 확장도 어려워져서 고안하게 된 것이 카프카입니다.

카프카를 적용한 이후의 링크드인 시스템은 아래와 같이 구조가 변경되었다고 합니다.

시스템 구조도만 봐도 확연하게 차이가 나는 것을 볼 수 있습니다.

카프카를 활용한 링크드인 시스템 구조

카프카는 발생하는 모든 이벤트/데이터의 흐름을 카프카가 중앙에서 관리하게 하며 아래와 같은 4가지의 목표를 가지고 개발되었습니다.

- 프로듀서와 컨슈머의 분리

- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용

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

- 데이터가 증가함에 따라 스케일아웃이 가능한 시스템

 

카프카는 메시지를 보내는 측(프로듀서 or 퍼블리셔)에서 카프카에 토픽이라는 메시지 저장소에 데이터를 저장하면 가져가는 측(컨슈머 or 섭스크라이버)이 원하는 토픽에서 데이터를 가져가는 펍/섭 모델로 동작합니다.

기존 펍/섭 모델과의 차이점은, 메시지 교환 전달의 신뢰성 관리를 프로듀서와 컨슈머 쪽으로 넘기고 메시징 시스템 내에서의 작업량을 최대한 줄여 메시징 전달 성능에 집중하였습니다.

 

카프카 특징에 대해서 좀 더 자세히 알아보면, 위에서 언급한 4가지 목표를 모두 실현했음을 알 수 있습니다.

1. 프로듀서와 컨슈머의 분리 : 프로듀서와 컨슈머가 완벽하게 분리됨에 따라서, 기능이 추가되더라도 카프카에서 데이터를 가져오거나 보내면 되므로, 기능 추가가 용이함

2. 멀티 프로듀서와 멀티 컨슈머 : 프로듀서나 컨슈머가 여러 개의 토픽에 보내거나 가져올 수 있어서 하나의 기능이 여러 토픽의 데이터를 필요한 경우에도 쉽게 구현할 수 있음

3. 디스크에 메시지 저장 : 기존의 메시징 시스템과 가장 다른 특징으로, 디스크에 메시지를 보관 주기에 따라 보관하므로, 일부 서비스에 장애가 발생하더라도, 카프카에 데이터가 저장되있으므로 데이터 손실이 일어나지 않음

4. 확장성 : 카프카는 클러스터로 구축이 가능하며, 수십 대의 브로커로도 쉽게 확장이 가능하며 확장은 카프카 서비스를 중단하지 않고 가능

5. 높은 성능 : 내부적으로 분선처리, 배치처리 등 다양한 기법을 사용하고 있어, 높은 성능을 내고 있음. 링크드인에서는 2015년 8월 기준으로 하루에 1페타바이트 이상의 데이터를 처리

 

카프카는 꾸준히 확장하고 발전되어 강력한 메시지 전달 능력을 바탕으로 단순히 메시징을 연결해주는 역할을 넘어서 실시간 분석까지 가능한 카프카 스트림즈, KSQL 등 분석 시스템으로도 진화하고 있으며 기존의 아파치 스톰이나 스파크와 같은 실시간 분석 플랫폼에 하둡을 활용한 배치 분석 플랫폼도 연결할 수 있습니다.

 

2. 설치

카프카는 홈페이지에서 다운로드를 통해서 쉽게 설치할 수 있습니다.

https://www.apache.org/dyn/closer.cgi?path=/kafka/2.4.0/kafka_2.12-2.4.0.tgz

다운 받으셔서, 압축을 해제하면 바로 실행해볼 수 있습니다.

그럼 바로 실행을 어떻게 하는지 알아보도록 하겠습니다.

 

카프카는 주키퍼를 활용하게 되어있습니다. 주키퍼는 분산애플리케이션을 위한 코디네이션 시스템입니다.

따로 설치를 하진 않아도 되고 카프카를 설치한 디렉토리 내에서 아래와 같이 실행할 수 있습니다.

bin/zookeeper-server-start.sh config/zookeeper.properties

 

카프카를 실행하기 위해선 꼭 주키퍼를 먼저 실행해야만 하며, 주키퍼 없이는 카프카가 실행되지 않습니다.

주키퍼를 실행한 후에, 아래와 같이 카프카를 실행할 수 있습니다.

bin/kafka-server-start.sh config/server.properties

 

 

 

'ETC > Kafka' 카테고리의 다른 글

[Kafka] 카프카 기본 실습  (0) 2020.12.27
[Kafka] 카프카 데이터 모델  (0) 2020.11.29