Offcanvas

데이터센터 / 빅데이터 | 애널리틱스 / 클라우드

‘아파치 카프카’, 개념부터 사용례까지

2022.03.02 Martin Heller  |  InfoWorld
2011년 링크드인(LinkedIn)에서 개발된 ‘아파치 카프카(Apache Kafka)’는 이벤트 스트리밍에서 널리 쓰이는 플랫폼 중 하나다. 카프카는 고성능 데이터 파이프라인, 스트리밍 애널리틱스, 데이터 통합, 미션 크리티컬 애플리케이션에 사용된다. 

모든 데이터를 데이터 웨어하우스에 저장하고 야간 배치 처리를 사용하여 분석하는 것만으로는 더 이상 비즈니스 또는 프로세스를 적시에 모니터링 및 관리하기가 충분하지 않다. 대신에 이후의 심층 분석을 위해 데이터 저장 외에 간단한 데이터 스트림 실시간 분석을 수행해야 한다. 
 
ⓒGetty Images

카프카의 부속물에는 아파치 플링크(Apache Flink), 아파치 삼자(Apache Samza), 아파치 스파크(Apache Spark), 아파치 스톰(Apache Storm), 데이터브릭스(Databricks), 버베리카(Ververica) 등이 있다. 카프카의 대안으로는 아마존 키네시스(Amazon Kinesis), 아파치 펄사(Apache Pulsar), 애저 스트림 애널리틱스(Azure Stream Analytics), 컨플루언트(Confluent), 구글 클라우드 데이터플로(Google Cloud Dataflow) 등이 있다.

단, 카프카의 단점은 대규모 카프카 클러스터 구성이 까다로울 수 있다는 것이다. 컨플루언트 클라우드(Confluent Cloud)와 아파치 카프카용 아마존 관리형 스트리밍(Amazon Managed Streaming) 등 카프카의 상용 클라우드 버전을 사용하면 이 문제와 다른 문제를 해결할 수 있다(유료).

아파치 카프카란?
아파치 카프카는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 미션 크리티컬 애플리케이션을 위한 오픈소스, 자바/스칼라, 분산 이벤트 스트리밍 플랫폼이다. 카프카 이벤트는 토픽별로 구성되고 저장된다. 카프카의 핵심 API는 5개이며, 다음과 같다. 

Admin API: 토픽, 브로커, 기타 카프카 객체를 관리하고 검사한다.

Producer API: 1개 이상의 카프카 토픽에 이벤트 스트림을 게시(작성)한다.

Consumer API: 1개 이상의 토픽을 구독하고(읽고) 여기에 생성된 이벤트 스트림을 처리한다.

Kafka Streams API: 스트림 처리 애플리케이션과 마이크로서비스를 구현한다. 이는 변환/통합, 연결 등의 스테이트풀 운영/윈도우 설정/이벤트 시간에 기초한 처리 등 이벤트 스트림을 처리할 수 있는 더 높은 수준의 기능을 제공한다. 1개 이상의 토픽에서 출력을 생성하고 입력 스트림을 다운 스트림으로 효과적으로 변환하기 위해 1개 이상의 토픽에서 입력을 읽어 들인다. 

Kafka Connect API: 카프카와 통합할 수 있도록 외부 시스템 및 애플리케이션의 이벤트 스트림을 소비하거나(읽거나) 생성하는(작성하는) 재사용 가능한 데이터 가져오기/내보내기 커넥터를 구축하고 실행한다. 물론 포스트그레SQL와 같은 관계형 데이터베이스의 커넥터는 테이블 세트의 모든 변경사항을 캡처할 수 있다. 하지만 카프카 커뮤니티가 이미 수백 개의 (바로 사용할 수 있는) 커넥터를 제공하기 때문에 자체 커넥터를 구축할 필요가 없다. 

스트림 API(Streams API)로 쉽게 처리할 수 있는 것보다 더 복잡한 스트림 처리를 구축하려면 카프카와 아파치 삼자(아래에서 설명) 또는 아파치 플링크와 통합할 수 있다. 아파치 카프카의 상용 버전은 컨플루언트를 고려할 수 있다.

카프카는 어떻게 작동할까?
카프카는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버와 클라이언트로 구성된 분산 시스템이다. 베어메탈 하드웨어, 가상머신 및 컨테이너 온프레미스, 클라우드 환경에 배포할 수 있다. 

서버: 카프카는 여러 데이터센터 또는 클라우드 리전에 걸쳐 있는 1개 이상의 서버 클러스터로 실행된다. 이러한 서버 중 일부는 브로커라는 스토리지 계층을 형성한다. 다른 서버는 카프카 커넥트(Kafka Connect)를 실행하여 이벤트 스트림으로 데이터를 계속해서 가져오고 내보내 카프카와 관계형 데이터베이스 및 기타 카프카 클러스터 등의 기존 시스템과 통합한다. 미션 크리티컬 사용 사례를 구축할 수 있도록 카프카 클러스터는 확장성과 내결함성이 뛰어나다. 서버 중 하나라도 장애가 발생하면 다른 서버가 작업을 넘겨받아 데이터 손실 없이 지속적인 작동을 보장한다.

클라이언트: 카프카 클라이언트를 사용하면 네트워크 문제 또는 시스템 장애 발생 시에도 이벤트 스트림을 대규모/병렬/내결함성 방식으로 읽고, 쓰고, 처리하는 분산 애플리케이션 및 마이크로서비스를 작성할 수 있다. 카프카에는 일부 클라이언트가 포함돼 있으며, 카프카 커뮤니티에서는 수십 개의 클라이언트가 제공한다. 카프카 클라이언트는 상위 수준의 카프카 스트림(Kafka Streams) 라이브러리를 비롯해 자바, 스칼라, 고, 파이썬, C/C++, 기타 프로그래밍 언어뿐만 아니라 REST API에서 사용할 수 있다. 

아파치 삼자(Apache Samza)란?
아파치 삼자도 (아파치 카프카와 함께) 링크드인에서 처음 개발된 오픈소스 스칼라/자바 분산 스트림 처리 프레임워크다. 삼자를 사용하면 아파치 카프카를 포함한 여러 소스의 데이터를 실시간으로 처리하는 스테이트풀 애플리케이션을 구축할 수 있다. 삼자의 주요 기능은 다음과 같다.

• 통합 API: 데이터 소스와 독립적인 방식으로 애플리케이션 로직을 설명한다. 동일한 API가 배치 및 스트리밍 데이터를 모두 처리할 수 있다.

• 모든 수준에서의 연결: 모든 소스의 데이터를 처리하고 변환한다. 삼자는 아파치 카프카, AWS 키네시스, 애저 이벤트 허브(서비스형 애저 네이티브 카프카), 엘라스틱서치, 아파치 하둡과의 기본 통합된다. 또 자체 소스와 통합하기도 쉽다.

• 임베디드 라이브러리: 기존 애플리케이션과 통합되며, 스트림 처리를 위해 별도의 클러스터를 가동하고 운영할 필요가 없다. 삼자를 자바/스칼라 애플리케이션에 내장된 경량 클라이언트 라이브러리로 사용할 수 있다.

• 한 번 작성으로 모든 곳에서 실행: 퍼블릭 클라우드부터 컨테이너 환경, 베어메탈 하드웨어까지 어디서나 애플리케이션을 실행할 수 있는 유연한 배포 옵션을 제공한다. 

• 관리형 서비스: 아파치 YARN 등의 인기 클러스터 관리자와 통합하여 스트림 처리를 관리형 서비스로 실행한다.

• 내결함성: 장애 발생 시 관련된 상태와 작업을 투명하게 마이그레이션한다. 삼자는 신속한 장애 복구를 위해 호스트 선호도(host-affinity) 및 점진적 체크 포인트를 지원한다.

• 대규모 환경 지원: 몇 테라바이트에 이르는 상태를 사용하고, 수천 개의 코어에서 실행되는 애플리케이션에서 테스트를 거쳤다. 삼자는 링크드인, 우버, 트립어드바이저, 슬랙 등의 여러 대기업을 지원하고 있다.

카프카와 컨플루언트
컨플루언트 플랫폼(Confluent Platform)은 아파치 카프카의 상용 버전이다. 온프레미스 및 클라우드로 제공된다. 컨플루언트 클라우드는 처음부터 서버리스에 유연하며 비용 효율적인 완전 관리형 클라우드 네이티브 서비스로 구축됐다. AWS, 마이크로소프트 애저, 구글 클라우드 플랫폼에서 실행된다.

주요 클라우드 서비스 업체에서의 카프카
아마존의 아파치 카프카용 관리형 스트리밍(Managed Streaming for Apache Kafka; MSK)은 AWS에서 컨플루언트 클라우드 및 아마존 키네시스와 공존한다. 이 3가지 모두 기본적으로 같은 서비스를 수행한다. 마이크로소프트 애저에서 HD인사이트(HDInsight) 기반의 아파치 카프카와 컨플루언트 클라우드는 애저 이벤트 허브(Azure Event Hubs) 및 애저 스트림 애널리틱스(Azure Stream Analytics)와 공존한다. 구글 클라우드에서는 구글 클라우드 데이터플로우(Google Cloud Dataflow), 구글 클라우드 데이터프록(Google Cloud Dataproc), 구글 클라우드 펍/섭(Google Cloud Pub/Sub), 구글 클라우드 빅쿼리(Google Cloud BigQuery)가 컨플루언트 클라우드와 공존한다.

카프카 사용 예시
컨플루언트의 고객사 ‘텐센트(Tencent)’는 카프카를 사용하여 지역 간 로그 수집, 머신러닝 플랫폼 및 마이크로서비스 간 비동기 통신을 위한 데이터 파이프라인을 구축했다. 이 회사는 단일 카프카 클러스터에서 얻을 수 있는 것보다 더 많은 처리량과 더 짧은 지연 시간이 필요했기 때문에 카프카 클러스터를 프록시 계층으로 래핑하여 최대 240Gb/s의 클러스터 대역폭을 통해 하루 10조 개 이상의 메시지를 처리하는 연합 카프카 설계를 생성했다.

마이크로소프트 애저는 컨플루언트 클라우드, MQTT 브로커 및 커넥터, 애저 코스모스 DB의 분석 스토어, 애저 시냅스 애널리틱스, 애저 스프링 클라우드를 통해 프로토타입 엔드투엔드 IoT 데이터 처리 솔루션을 구축했다. 

ACERTUS는 컨플루언트 클라우드, ksqlDB(데이터 스트리밍에 특화된 SQL 데이터베이스), AWS 람다, 스노우플레이크 데이터 웨어하우스를 사용해 엔드투엔드 차량 관리 시스템을 구축했다. 이 회사는 해당 시스템을 통해 대부분의 수동 시스템을 대체했고, 도입 1년 차에 1,000만 달러 이상의 수익을 발생시켰다고 보고했다.

지금까지 살펴본 것처럼 카프카는 스트리밍 데이터가 필요한 실시간 대규모 문제를 해결할 수 있다. 이와 동시에, 카프카 기반 솔루션을 설계하고 카프카를 분석 및 스토리지와 상호 연결하는 많은 방법이 존재한다. ciokr@idg.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.