상세 컨텐츠

본문 제목

Apache Kafka란

Data Platform/Kafka

by leediz 2022. 1. 9. 23:53

본문

Apache Kafka란?

수많은 이벤트를 처리할 수 있는 분산 이벤트 스트리밍 플랫폼으로 2011년 Linked in에서 만들고 오픈소스로 제공한 이후 이벤트 스트리밍 플랫폼으로 빠르게 발전하는 중이다. 대부분 Event Hub 또는 Messaging Queue로만 사용하고 있지만, Kafka 이외의 ksqlDB, schema registry, connector 등을 함께 사용하여 데이터 플랫폼으로 사용할 수 있다.

 

Kafka가 등장한 배경

  • Kafka 이전의 흔한 아키텍처

한 눈에 봐도 아키텍처가 매우 복잡하다.. 위와 같은 아키텍처에서는 시스템을 확장하는 것이 매우 어렵다. 시스템간의 의존성이 복잡하여 만약 한 시스템에서 장애가 발생하더라도 여러 시스템에 영향이 가며 이는 장애를 복구하는데 있어서도 매우 큰 걸림돌이 된다. 이외에도 많은 단점들을 내포하고 있다.

  • Kafka를 Data hub 또는 Messaging Queue로 사용하는 아키텍처

Kafka를 사용한 아키텍처가 이전의 아키텍처에 비해 훨신 간단해 보인다. 간단히 살펴보면 Pub/Sub 구조로 분리되었기 때문에 데이터를 보내는 쪽(Producer)와 데이터를 받는 쪽(Consumer)의 역할이 분리되어있다. 또한 시스템간의 의존성이 낮아져서 확장하기에 유리하다. 위의 아키텍처에서는 데이터를 End-to-End로 받았기 때문에 하나의 솔루션을 추가하더라도 연결 작업을 해야할 솔루션들 또한 많아지는데, Kafka를 사용함으로써 추가하는 솔루션은 Kafka만 연동하면 되는 간단한 구조로 바뀌었다.

 

Kafka의 주요 특징

  1. 이벤트 스트림을 안전하게 전송하는 Publish & Subscribe 구조
    • 데이터를 Kafka에 전송하는 Producer와 Kafka에서 데이터를 가져가는 Consumer를 분리되어 동작하고 Producer와 Consumer는 직접적으로 서로 영향을 주고받지 않기 때문에 개발자 입장에서는 Producer 또는 Consumer만 개발하면 된다.
  2. 이벤트 스트림을 디스크에 저장
    • Producer에 의해 Kafka에 저장된 모든 메시지들은 Kafka의 로컬 디스크에 저장되며 Default 옵션으로 약 일주일간 보관할 수 있다. 때문에 Producer는 Kafka에 한번만 데이터를 보내서 저장하게 되면 각각의 목적에 따라 여러 Consumer들이 Kafka에 저장된 메시지를 가져가면 된다. 만약 Consumer에 장애가 발생하더라도 Kafka에 저장된 메시지를 다시 가져가면 되므로 안정적이다.
  3. 이벤트 스트림을 분석 및 처리
    • Kafka Streams라는 이벤트 스트림을 처리하는 Library를 사용하여 손쉽게 이벤트 스트림을 처리하고 분석할 수 있다.

 

데이터 플랫폼으로의 Kafka Architecture

Kafka 이외에 Kafka Connect, Kafka Streams, ksqlDB, Schema Resgistry 등을 사용하여 Kafka를 보다 더 효율적이고 유용하게 사용할수 있다. 이러한 애플리케이션 또는 프레임워크가 없었다면 모두 개발을 통해서 kafka를 사용해야 했을텐데 덕분에 개발을 최소화 하여 사용할 수가 있다.

  • Kafka Connect
    • Kafka에 데이터를 전송하거나 Kafka로부터 데이터를 가져오기 위한 데이터 스트리밍 Framework
    • Source Connect는 Data Source에서 데이터를 가져오는 Producer의 역할
    • Sink Connect는 Data Sink로 데이터를 전송하기 위한 Consumer의 역할
    • Confluent HUB 사이트에서 Connect를 다운로드 받을 수 있으며 Connect 종류에 따라 무료 라이센스 또는 상용 라이센스가 있다.
  • Kafka Streams
    • Event Streaming용 Library
    • Java 및 Scala로 실시간 이벤트 스트리밍 처리 애플리케이션 또는 마이크로 서비스를 작성하기 위한 Apache Kafka Streams 라이브러리
  • ksqlDB
    • 이벤트 스트리밍 Database(또는 SQL 엔진)
    • Confluent Community License (Apach License가 아님)
    • SQL과 유사한 형태인 ksql을 사용하여 쿼리를 수행하게 되며 이를 통해 스트림 프로세싱을 수행함
  • Schema Registry
    • message가 갖고 있는 모든 스키마의 버전 기록을 저장하는 장소
    • 스키마의 중앙 집중식 관리를 제공

 

Confluent란?

Kafka는 Linked in에서 이벤트 스트림 처리를 위해 개발되었고 2011년에 Apache Software Foundation에 기부되어 오픈소스화 되었다. 바로 2012년에 Apache Incubator 과정을 벗어나 Top-Level 프로젝트가 될 정도로 빠르게 발전했다. Kafka를 창시한 Jay Kreps는 핵심 멤버들과 함께 Kafka 개발에 집중하기 위해 2014년에 Confluent라는 회사를 창업했고 2021년 6월에는 IPO를 통해 Nasdaq에 상장했다.
스타트업이나 전문 개발자가 있는 기업의 경우에는 오픈소스의 Apache Kafka를 사용하여 필요한 부분은 개발할 수 있겠지만, 말이 쉽지 어느 정도 숙련된 개발자가 필요하며 운영 과정에 있어서도 분명 시행착오를 겪을 수밖에 없다. 이런저런 이유로 오픈소스에 대해 부담을 느끼는 기업들은 라이센스를 통해 어느 정도 수준을 보장받고 싶어하기도 하고 개발과정보다 운영에만 더 집중하고 싶으면 솔루션화 된 애플리케이션을 구매하여 사용하고 싶어할수도 있다. Confluent는 Kafka와 관련 애플리케이션을 유료화 하여 SaaS 형태로 제공을 하고 오픈소스 이외의 자체 개발한 애플리케이션을 제공한다.(대표적으로 Confleutn Control Center) 유료화해서인지 Confluent의 Kafka는 오픈소스의 Kafka보다 더 최적화하여 개발하였다고도 한다.
필요에 따라 오픈소스의 Kafka를 사용하며 개발하던가 유료 라이센스를 구매하여 Confluent가 제공하는 Confluent Platform을 사용하면 될것 같다.
부디 타 회사처럼 Apache License를 갑자기 변경하는 일은 없었으면 좋겠다..

 

앞으로는 Kafka의 주요 개념 및 더 디테일한 내용에 대해 포스팅해보겠다.

 


참고자료

관련글 더보기

댓글 영역