2 분 소요

 안녕하세요 마개입니다. 이번 글에서는 데이터 파이프라인에 많이 이용하는 Apache Kafka에 대해 대략적으로 알아보도록 하겠습니다.



image



Apache Kafka와 탄생배경


Apache Kafka(이하. Kafka)는 오픈 소스 분산형 Pub-Sub 메시징 플랫폼입니다.

Kafka는 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션입니다. 서버는 여러 데이터 센터에 분산되어 있을 수 있으며 스트림 데이터(메시지)를 토픽으로 저장하여 데이터 지속성을 제공할 수 있습니다. Kafka는 데이터의 분산 스트리밍, 파이프 라이닝, 실시간 스트리밍 데이터를 처리하기 위한 목적으로 링크드인에서 개발되었습니다.

링크드인에서는 다음과 같은 이슈를 해결하고자 Kafka를 개발하게 되었습니다.


image


  • 시스템 복잡도가 높아짐에 따라 통합된 데이터 전송 영역의 부재가 발생함.
  • 기존에 ActiveMQ를 사용했지만 수많은 트래픽과 데이터를 처리하는 데이터 파이프라인의 관리가 어려움


image


위와 같은 이유들로 인해 링크드인에서는 Kafka를 직접 개발하게 되었고 이를 Apache 재단을 통해 오픈소스로 공개하였습니다. 링크드인에 Kafka를 적용한 후에는 위와 같은 모습으로 변화하였습니다.

  • 모든 이벤트나 데이터의 흐름을 통합된 중앙 영역에서 관리가 가능해짐
  • 기존에 비해 심플해진 모습으로 확장성에도 용이한 모습을 보임



Kafka의 주요 개념


다음으로 Kafka에서 사용하는 주요 개념들에 대해 보겠습니다.


image


Kafka는 Pub-Sub (발행-구독) 모델을 기반으로 크게 Producer, Consumer, Broker로 나눠집니다.

  • 브로커 (Broker) : 브로커는 데이터를 수신, 전달하는 서비스로 하나의 서버 (도는 인스턴스) 당 하나의 데몬 프로세스로 동작하여 메시지 수신/전달 요청을 받아들입니다. 여러 대의 클러스터로 구성할 수 있으며 브로커를 추가함으로써 Scale-out이 가능합니다.
  • 프로듀서 (Producer) : 프로듀서는 API를 이용하여 브로커에 데이터를 송신하기 위해 구현된 애플리케이션입니다. 각종 로그를 전송하거나 미들웨어와 연동하여 동작하는 경우가 많습니다.
  • 컨슈머 (Consumer)​ : 컨슈머는 브로커에서 메시지를 취득하도록 구현된 애플리케이션입니다. 일정 기간 데이터를 축적한 스토리지에서의 데이터 추출 및 실시간 처리를 위한 데이터 입력 등으로 이용됩니다. ​
  • 토픽 (Topic) : 토픽은 Pub-Sub 메시징에서 보편적인 개념입니다. 토픽은 애플리케이션에서 주어진 메시지를 종류별로 관리하는 스토리지로 브로커에 배치되어 관리됩니다.



Kafka의 장점


  • 원활한 메시징 및 스트리밍 기능 : 대용량 데이터를 처리할 때 메시징은 통신 및 확장성에 상당한 이점을 제공할 수 있습니다. 실시간으로 레코드를 게시, 구독, 저장 및 처리하는 고유한 기능을 제공합니다.
  • 시간 기반 데이터 보존 : Kafka는 클러스터 전체의 디스크에 데이터를 지속적으로 저장하는 기능을 통해 내결함성에 대한 간단한 접근 방식을 허용합니다. 시간 기반 보존 기간을 기반으로 저장된 데이터를 회수하고 순차적 오프셋을 기반으로 데이터에 액세스하는 기능과 함께 클러스터 설정에서 데이터 저장 및 검색에 대한 강력한 접근 방식을 제공합니다. ​
  • 스트림 처리를 위한 기본 접근 방식 : 데이터를 레코드, 메시지 또는 스트림으로 원활하게 이동할 수 있는 기반을 제공합니다. ​
  • 기본 통합 지원 : Kafka는 Connector API를 사용하여 기본 통합 지점을 제공함으로써 확장 및 성장할 수 있는 기본 기능을 제공합니다. ​
  • 영속성 : Kafka는 레코드/메시지가 게시될때 지속적으로 유지하는 서버 클러스터를 유지 관리하여 작동합니다. 구성 가능한 보존 시간 제한을 사용하여 소비에 관계없이 주어진 레코드가 지속되는 기간을 결정합니다. 보존 시간 제한 내에 있는 동안 레코드/메시지를 사용할 수 있습니다. ​