본문 바로가기

Data & Database

Kafka와 Spark의 차이점 & 유사점

Kafka와 Spark의 차이점

Apache Kafka는 스트림 처리 엔진이고 Apache Spark는 분산 데이터 처리 엔진으로

배치 처리에서는 단일 워크로드에서 매우 많은 양의 데이터를 처리합니다. 스트림 처리에서는 작은 단위의 데이터를 실시간 흐름으로 연속적으로 처리합니다.

원래 Spark는 배치 처리용으로 설계되었고 Kafka는 스트림 처리용으로 설계되었습니다.

이후 Spark는 Spark 스트리밍 모듈을 기본 분산 아키텍처에 추가 기능으로 추가했지만 Kafka가 대부분의 스트리밍 데이터 사용 사례에서 더 낮은 지연 시간과 더 높은 처리량을 제공합니다.

워크플로

Kafka는 주제, 브로커, 클러스터 및 소프트웨어 ZooKeeper를 분산하여 실시간 데이터 스트림을 지원합니다.

한편 Spark는 데이터 처리 워크로드를 여러 작업자 노드로 나누고, 이는 기본 노드에 의해 조정됩니다. 

작동방식

Kafka는 실시간 분산 처리 엔진을 사용하여 데이터 생산자와 소비자를 연결합니다. Kafka의 핵심 구성 요소는 다음과 같습니다.

  • 소비자와 생산자 간의 거래를 용이하게 하는 브로커
  • 서로 다른 서버에 있는 여러 브로커로 구성된 클러스터

Spark는 기본 Spark 기능을 포함하는 주요 구성 요소인 Spark Core를 사용합니다.

이 기능에는 분산 데이터 처리, 메모리 관리, 작업 스케줄링 및 디스패치, 스토리지 시스템과의 상호 작용이 포함되며 데이터 전환 및 일괄 처리 워크플로를 지원하는 여러 순차 계층이 있는 분산형 기본-보조 아키텍처를 사용합니다.

 

ETL

추출, 전환, 적재(ETL)는 다양한 소스의 데이터를 대형 중앙 집중식 리포지토리에 결합하는 과정입니다.

 

Spark에는 다양한 전환 및 로드 기능이 내장되어 있으며, 사용자는 클러스터에서 데이터를 검색하고 적절한 데이터베이스에서 전환 및 저장할 수 있습니다.

반면에 Kafka는 기본적으로 ETL을 지원하지 않습니다. 대신 API를 사용하여 데이터 스트림에서 ETL 함수를 수행할 수 있습니다.

대기 시간

Spark는 실시간 처리 및 데이터 분석을 지원할 수 없었던 Apache Hadoop을 대체하기 위해 개발되어 Spark는 하드 디스크 대신 RAM에 데이터를 저장하기 때문에 거의 실시간 읽기/쓰기 작업을 제공합니다. 

하지만 Kafka는 지연 시간이 매우 짧은 이벤트 스트리밍 기능으로 Spark를 능가합니다. 개발자는 Kafka를 사용하여 실시간 데이터 변경에 대응하는 이벤트 기반 애플리케이션을 구축할 수 있습니다.

차이점 요약

  Kafka Spark
ETL ETL 함수를 위한 Kafka Connect API 및 Kafka Streams API가 필요합니다. ETL을 기본적으로 지원합니다.
지연 시간 매우 짧은 지연 시간. 각 수신 이벤트에 대해 실제 시간을 제공합니다.  짧은 지연 시간. RAM에서 읽기/쓰기 작업을 수행합니다.
프로그래밍 언어 데이터 변환 함수를 구현하려면 추가 라이브러리가 필요합니다.  데이터 변환 및 기계 학습 작업을 위해 Java, Python, Scala 및 R을 지원합니다. 
가용성  다른 서버에 데이터 파티션을 백업합니다. 활성 파티션에 장애가 발생할 경우 요청을 백업에 전달합니다.  여러 노드에서 영구 데이터를 유지합니다. 노드 장애 시 결과를 다시 계산합니다. 
데이터 소스 여러 데이터 원본을 동시에 지원할 수 있습니다. 단일 데이터 원본에 연결합니다. 여러 데이터 소스로 스트리밍하려면 Spark Structured Streaming이 필요합니다.

Kafka와 Spark의 유사점

Apache Kafka 및 Apache Spark는 모두 더 빠른 속도로 데이터를 처리하기 위해 Apache Software Foundation에서 설계되었으며, 다양한 데이터 소스의 실시간 정보를 수집, 저장 및 분석할 수 있는 최신 데이터 아키텍처에서 필요합니다.

 

고속 데이터 처리를 관리하기 위해 Kafka 와 Spark는 다음과 같은 유사점이 있습니다.

빅 데이터 처리

Kafka는 여러 서버에 분산된 데이터 파이프라인을 제공하여 대량의 데이터를 실시간으로 수집하고 처리합니다. 다양한 소스 간에 효율적이고 지속적인 데이터 전달이 필요한 빅 데이터 사용 사례를 지원합니다.

Spark는 기계 학습 라이브러리인 MLlib를 통해 개발자는 저장된 빅 데이터 세트를 사용하여 비즈니스 인텔리전스 애플리케이션을 구축할 수 있습니다.

데이터 다양성

Kafka와 Spark는 모두 비정형, 반정형 및 정형 데이터를 수집합니다.

엔터프라이즈 애플리케이션, 데이터베이스 또는 기타 스트리밍 소스에서 데이터 파이프라인을 생성할 수 있습니다.

두 데이터 처리 엔진 모두 분석에 일반적으로 사용되는 일반 텍스트, JSON, XML, SQL 및 기타 데이터 형식을 지원합니다.

확장성

Kafka는 확장성이 뛰어난 데이터 스트리밍 엔진이며 수직 및 수평으로 모두 확장할 수 있습니다. 

Spark도 클러스터에 노드를 더 추가하여 처리 용량을 확장할 수도 있습니다.

 

 

 

참고 : https://aws.amazon.com/ko/compare/the-difference-between-kafka-and-spark/

'Data & Database' 카테고리의 다른 글

Snowflake 개요 및 특징  (2) 2023.11.19
Chart.js로 데이터 시각화하기  (0) 2023.11.15
Spark의 개요 및 특징  (0) 2023.11.11
Kafka 개요 및 특징  (0) 2023.11.10
NiFi 개요와 특징  (0) 2023.06.29