Kafka 및 Spark로 데이터 처리 시작

빅 데이터 처리는 조직이 직면하는 가장 복잡한 절차 중 하나입니다. 대량의 실시간 데이터가 있는 경우 프로세스가 더 복잡해집니다.

이 포스트에서는 빅 데이터 처리가 무엇인지, 어떻게 처리되는지 알아보고 가장 유명한 데이터 처리 도구인 Apache Kafka와 Spark에 대해 알아보겠습니다.

데이터 처리란 무엇입니까? 어떻게 이루어지나요?

데이터 처리는 자동화된 프로세스를 사용하여 수행되는지 여부에 관계없이 모든 작업 또는 작업 집합으로 정의됩니다. 논리적이고 적절한 해석 성향에 따라 정보를 수집, 정렬, 구성하는 것으로 생각할 수 있습니다.

사용자가 데이터베이스에 액세스하여 검색 결과를 얻을 때 필요한 결과를 얻는 것은 데이터 처리입니다. 검색 결과로 추출된 정보는 데이터 처리의 결과입니다. 그렇기 때문에 정보기술은 데이터 처리를 중심으로 존재의 초점을 맞추고 있다.

기존의 데이터 처리는 간단한 소프트웨어를 사용하여 수행되었습니다. 하지만 빅데이터가 등장하면서 상황이 달라졌다. 빅데이터는 그 양이 100테라바이트, 페타바이트를 넘을 수 있는 정보를 말합니다.

또한 이 정보는 정기적으로 업데이트됩니다. 예를 들면 컨택 센터, 소셜 미디어, 증권 거래소 거래 데이터 등의 데이터가 포함됩니다. 이러한 데이터는 때때로 데이터 스트림이라고도 하며, 일정하고 제어되지 않는 데이터 스트림입니다. 주요 특징은 데이터에 정의된 제한이 없으므로 스트림이 시작되거나 종료되는 시점을 말할 수 없다는 것입니다.

데이터는 목적지에 도착하는 대로 처리됩니다. 일부 저자는 이를 실시간 또는 온라인 처리라고 부릅니다. 다른 접근 방식은 블록, 일괄 처리 또는 오프라인 처리로, 데이터 블록이 몇 시간 또는 며칠 단위로 처리됩니다. 배치는 종종 밤에 실행되어 그날의 데이터를 통합하는 프로세스입니다. 일주일 또는 한 달의 기간이 오래된 보고서를 생성하는 경우가 있습니다.

스트리밍을 통한 최고의 빅 데이터 처리 플랫폼이 Kafka 및 Spark와 같은 오픈 소스라는 점을 감안할 때 이러한 플랫폼은 다른 서로 보완적인 플랫폼을 사용할 수 있습니다. 즉, 오픈 소스이기 때문에 더 빠르게 발전하고 더 많은 도구를 사용합니다. 이러한 방식으로 데이터 스트림은 중단 없이 가변적인 속도로 다른 위치에서 수신됩니다.

이제 가장 널리 알려진 두 가지 데이터 처리 도구를 살펴보고 비교할 것입니다.

아파치 카프카

Apache Kafka는 지속적인 데이터 흐름으로 스트리밍 애플리케이션을 생성하는 메시징 시스템입니다. 원래 LinkedIn에서 만든 Kafka는 로그 기반입니다. 로그는 각각의 새로운 정보가 파일 끝에 추가되기 때문에 기본 저장 형식입니다.

  여러 도시에 대한 시간별 및 격주 예측

Kafka는 높은 처리량을 주요 특징으로 하기 때문에 빅 데이터를 위한 최고의 솔루션 중 하나입니다. Apache Kafka를 사용하면 실시간으로 일괄 처리를 변환하는 것도 가능하며,

Apache Kafka는 애플리케이션이 발행하고 구독하는 애플리케이션이 메시지를 수신하는 발행-구독 메시징 시스템입니다. 메시지 게시와 수신 사이의 시간은 밀리초일 수 있으므로 Kafka 솔루션은 대기 시간이 짧습니다.

카프카 작업

Apache Kafka의 아키텍처는 생산자, 소비자 및 클러스터 자체로 구성됩니다. 생산자는 클러스터에 메시지를 게시하는 모든 애플리케이션입니다. 소비자는 Kafka에서 메시지를 받는 모든 응용 프로그램입니다. Kafka 클러스터는 메시징 서비스의 단일 인스턴스로 작동하는 노드 집합입니다.

카프카 작업

Kafka 클러스터는 여러 브로커로 구성됩니다. 브로커는 생산자로부터 메시지를 받아 디스크에 쓰는 Kafka 서버입니다. 각 브로커는 주제 목록을 관리하며 각 주제는 여러 파티션으로 나뉩니다.

브로커는 메시지를 수신한 후 각 주제에 대해 등록된 소비자에게 메시지를 보냅니다.

Apache Kafka 설정은 파티션 위치, 이름 목록, 주제 목록 및 사용 가능한 노드와 같은 클러스터 메타데이터를 저장하는 Apache Zookeeper에 의해 관리됩니다. 따라서 Zookeeper는 클러스터의 다른 요소 간의 동기화를 유지합니다.

Zookeeper는 Kafka가 분산 시스템이기 때문에 중요합니다. 즉, 쓰기와 읽기는 여러 클라이언트에서 동시에 수행됩니다. 장애가 발생하면 Zookeeper는 교체를 선택하고 작업을 복구합니다.

사용 사례

Kafka는 특히 메시징 도구로 사용하기 위해 인기를 얻었지만 그 다재다능함은 그 이상이며 아래 예와 같이 다양한 시나리오에서 사용할 수 있습니다.

메시징

통신하는 당사자를 분리하는 비동기식 통신 형식입니다. 이 모델에서 한 당사자는 데이터를 Kafka에 메시지로 보내므로 다른 응용 프로그램은 나중에 데이터를 사용합니다.

활동 추적

페이지 보기, 클릭, 데이터 입력 등과 같이 웹사이트와 사용자의 상호 작용을 추적하는 데이터를 저장하고 처리할 수 있습니다. 이러한 유형의 활동은 일반적으로 많은 양의 데이터를 생성합니다.

측정항목

중앙 집중식 보고서를 생성하기 위해 여러 소스의 데이터 및 통계를 집계하는 작업이 포함됩니다.

로그 집계

다른 시스템에서 발생한 로그 파일을 중앙에서 집계하고 저장합니다.

스트림 처리

데이터 파이프라인 처리는 여러 단계로 구성되며, 여기서 원시 데이터는 주제에서 소비되고 집계, 강화 또는 다른 주제로 변환됩니다.

이러한 기능을 지원하기 위해 플랫폼은 기본적으로 세 가지 API를 제공합니다.

  • Streams API: 한 주제의 데이터를 소비하고 변환하고 다른 주제에 쓰는 스트림 프로세서 역할을 합니다.
  • 커넥터 API: 관계형 데이터베이스와 같은 기존 시스템에 주제를 연결할 수 있습니다.
  • 생산자 및 소비자 API: 응용 프로그램에서 Kafka 데이터를 게시하고 사용할 수 있습니다.

장점

복제, 분할 및 순서 지정

Kafka의 메시지는 보안과 전달 속도를 보장하기 위해 도착하는 순서대로 클러스터 노드의 파티션 전체에 복제됩니다.

데이터 변환

Apache Kafka를 사용하면 일괄 ETL 스트림 API를 사용하여 실시간으로 일괄 처리를 변환할 수도 있습니다.

순차적 디스크 액세스

Apache Kafka는 메시지가 더 빨라야 하므로 메모리가 아닌 디스크에 유지합니다. 사실, 메모리 액세스는 대부분의 상황에서, 특히 메모리의 임의 위치에 있는 데이터 액세스를 고려할 때 더 빠릅니다. 그러나 Kafka는 순차적 액세스를 수행하며 이 경우 디스크가 더 효율적입니다.

  메가비트와 메가바이트의 차이점은 무엇입니까?

아파치 스파크

Apache Spark는 클러스터에서 병렬 데이터를 처리하기 위한 빅 데이터 컴퓨팅 엔진 및 라이브러리 세트입니다. Spark는 Hadoop 및 Map-Reduce 프로그래밍 패러다임의 진화입니다. 처리하는 동안 디스크에 데이터를 유지하지 않는 효율적인 메모리 사용 덕분에 100배 더 빠를 수 있습니다.

Spark는 세 가지 수준으로 구성됩니다.

  • 저수준 API: 이 수준에는 다른 구성 요소에 필요한 작업 및 기타 기능을 실행하기 위한 기본 기능이 포함됩니다. 이 계층의 다른 중요한 기능은 보안, 네트워크, 일정 관리 및 파일 시스템 HDFS, GlusterFS, Amazon S3 등에 대한 논리적 액세스 관리입니다.
  • 구조적 API: 구조적 API 수준은 Hive, Parquet, JSON 등과 같은 형식으로 읽을 수 있는 DataSet 또는 DataFrame을 통한 데이터 조작을 처리합니다. SparkSQL(SQL로 쿼리를 작성할 수 있는 API)을 사용하여 원하는 방식으로 데이터를 조작할 수 있습니다.
  • 높은 수준: 가장 높은 수준에는 Spark Streaming, Spark MLlib 및 Spark GraphX를 비롯한 다양한 라이브러리가 있는 Spark 에코시스템이 있습니다. 그들은 충돌 복구, 클래식 머신 러닝 모델 생성 및 검증, 그래프 및 알고리즘 처리와 같은 스트리밍 수집 및 주변 프로세스를 관리합니다.

스파크의 작동

Spark 애플리케이션의 아키텍처는 세 가지 주요 부분으로 구성됩니다.

드라이버 프로그램: 데이터 처리 실행을 조정하는 역할을 합니다.

클러스터 관리자: 클러스터의 여러 시스템을 관리하는 구성 요소입니다. Spark가 분산 실행되는 경우에만 필요합니다.

작업자 노드: 프로그램의 작업을 수행하는 기계입니다. Spark가 컴퓨터에서 로컬로 실행되는 경우 드라이버 프로그램 및 작업 역할을 수행합니다. 이러한 Spark 실행 방식을 독립 실행형이라고 합니다.

클러스터 개요

스파크 코드는 다양한 언어로 작성할 수 있습니다. Spark Shell이라는 Spark 콘솔은 데이터 학습 및 탐색을 위한 대화형입니다.

소위 Spark 애플리케이션은 하나 이상의 Job으로 구성되어 대규모 데이터 처리를 지원합니다.

실행에 대해 이야기할 때 Spark에는 두 가지 모드가 있습니다.

  • 클라이언트: 드라이버는 리소스 관리자를 거치지 않는 클라이언트에서 직접 실행됩니다.
  • 클러스터: 리소스 관리자를 통해 애플리케이션 마스터에서 실행되는 드라이버(클러스터 모드에서 클라이언트 연결이 끊어지면 애플리케이션은 계속 실행됩니다.)

Resource Manager와 같은 연결된 서비스가 각 실행의 필요성을 식별하여 최상의 성능을 제공할 수 있도록 Spark를 올바르게 사용해야 합니다. 따라서 Spark 작업을 실행하고 호출을 구조화하는 가장 좋은 방법을 아는 것은 개발자의 몫이며, 이를 위해 실행자 Spark를 원하는 방식으로 구조화하고 구성할 수 있습니다.

Spark 작업은 주로 메모리를 사용하므로 작업 노드 실행기의 Spark 구성 값을 조정하는 것이 일반적입니다. Spark 워크로드에 따라 특정 비표준 Spark 구성이 더 최적의 실행을 제공하는지 결정할 수 있습니다. 이를 위해 사용 가능한 다양한 구성 옵션과 기본 Spark 구성 자체 간의 비교 테스트를 수행할 수 있습니다.

  체크 아웃해야 할 8 가지 훌륭한 XFCE 테마

사용 사례

Apache Spark는 실시간 또는 아카이브, 구조화 또는 비구조화 여부에 관계없이 방대한 양의 데이터를 처리하는 데 도움이 됩니다. 다음은 인기 있는 사용 사례 중 일부입니다.

데이터 강화

종종 기업은 과거 고객 데이터와 실시간 행동 데이터를 조합하여 사용합니다. Spark는 비정형 이벤트 데이터를 정형 데이터로 변환하는 지속적인 ETL 파이프라인을 구축하는 데 도움이 될 수 있습니다.

트리거 이벤트 감지

Spark Streaming을 사용하면 잠재적인 문제나 사기를 나타낼 수 있는 일부 드물거나 의심스러운 동작을 신속하게 감지하고 대응할 수 있습니다.

복잡한 세션 데이터 분석

Spark Streaming을 사용하면 애플리케이션에 로그인한 후의 활동 등 사용자 세션과 관련된 이벤트를 그룹화하고 분석할 수 있습니다. 이 정보는 기계 학습 모델을 업데이트하는 데 지속적으로 사용할 수도 있습니다.

장점

반복 처리

작업이 데이터를 반복적으로 처리하는 것이라면 Spark의 탄력적인 분산 데이터 집합(RDD)을 사용하면 중간 결과를 디스크에 쓰지 않고도 여러 메모리 내 맵 작업을 수행할 수 있습니다.

그래픽 처리

GraphX ​​API를 사용한 Spark의 계산 모델은 그래픽 처리의 일반적인 반복 계산에 탁월합니다.

기계 학습

Spark에는 MLlib가 있습니다. 즉, 메모리에서도 실행되는 기성 알고리즘이 있는 내장 기계 학습 라이브러리입니다.

카프카 대 스파크

Kafka와 Spark 모두에 대한 사람들의 관심은 거의 비슷했지만 둘 사이에는 몇 가지 중요한 차이점이 있습니다. 살펴보겠습니다.

#1. 데이터 처리

Kafka는 애플리케이션 간의 데이터 전송을 담당하는 실시간 데이터 스트리밍 및 저장 도구이지만 완전한 솔루션을 구축하기에는 충분하지 않습니다. 따라서 Spark와 같이 Kafka가 수행하지 않는 작업에는 다른 도구가 필요합니다. 반면 Spark는 Kafka 주제에서 데이터를 가져와 결합된 스키마로 변환하는 일괄 처리 우선 데이터 처리 플랫폼입니다.

#2. 메모리 관리

Spark는 메모리 관리를 위해 RDD(Robust Distributed Datasets)를 사용합니다. 거대한 데이터 세트를 처리하는 대신 클러스터의 여러 노드에 분산합니다. 대조적으로 Kafka는 HDFS와 유사한 순차 액세스를 사용하고 데이터를 버퍼 메모리에 저장합니다.

#삼. ETL 변환

Spark와 Kafka는 모두 일반적으로 트랜잭션 기반(OLTP)에서 분석 기반(OLAP)으로 한 데이터베이스에서 다른 데이터베이스로 레코드를 복사하는 ETL 변환 프로세스를 지원합니다. 그러나 ETL 프로세스를 위한 기능이 내장된 Spark와 달리 Kafka는 Streams API를 사용하여 지원합니다.

#4. 데이터 지속성

Spark에서 RRD를 사용하면 나중에 사용할 수 있도록 데이터를 여러 위치에 저장할 수 있지만 Kafka에서는 데이터를 유지하기 위해 구성에서 데이터 세트 개체를 정의해야 합니다.

#5. 어려움

Spark는 다양한 고급 프로그래밍 언어를 지원하기 때문에 완벽한 솔루션이며 배우기 쉽습니다. Kafka는 다양한 API 및 타사 모듈에 의존하므로 작업하기 어려울 수 있습니다.

#6. 회복

Spark와 Kafka는 모두 복구 옵션을 제공합니다. Spark는 RRD를 사용하여 데이터를 지속적으로 저장할 수 있으며 클러스터 장애가 발생하면 복구할 수 있습니다.

Kafka는 클러스터 내부의 데이터를 지속적으로 복제하고 브로커 간에 복제를 수행하므로 장애가 발생할 경우 다른 브로커로 이동할 수 있습니다.

스파크와 카프카의 유사점

Apache SparkApache KafkaOpenSourceOpenSourceBuild Data Streaming ApplicationBuild Data Streaming ApplicationSupports Stateful ProcessingSupports Stateful ProcessingSupportsSQLSupports Spark와 Kafka 간의 유사성

마지막 단어

Kafka와 Spark는 모두 Scala와 Java로 작성된 오픈 소스 도구로 실시간 데이터 스트리밍 애플리케이션을 구축할 수 있습니다. 상태 저장 처리, SQL 지원 및 ETL을 포함하여 몇 가지 공통점이 있습니다. Kafka와 Spark는 응용 프로그램 간 데이터 전송의 복잡성 문제를 해결하는 데 도움이 되는 보완 도구로도 사용할 수 있습니다.