Azure Blob Storage 또는 Azure Data Lake Storage에서 Azure Event Hubs를 통해 이벤트 캡처

Azure Event Hubs를 사용하면 시간 또는 크기 간격을 유연하게 지정하여 Event Hubs의 스트리밍 데이터를 선택한 Azure Blob 스토리지 또는 Azure Data Lake Storage Gen 1 또는 Gen 2 계정에 자동으로 캡처할 수 있습니다. 캡처 설정은 빠르고, 관리 비용이 없으며 표준 계층의 Event Hubs 처리량 단위 또는 프리미엄 계층 처리 단위를 사용하여 자동으로 크기를 조정합니다. Event Hubs 캡처는 스트리밍 데이터를 Azure에 로드하는 가장 쉬운 방법이며 데이터 캡처보다 데이터 처리에 집중할 수 있게 해줍니다.

Azure Storage 또는 Azure Data Lake Storage로의 Event Hubs 데이터 캡처를 보여주는 이미지

참고

Azure Data Lake Storage Gen 2 를 사용하도록 Event Hubs 캡처를 구성하는 것은 Azure Blob Storage를 사용하도록 구성하는 것과 같습니다. 자세한 내용은 Event Hubs 캡처 구성을 참조하세요.

Event Hubs 캡처를 사용하면 동일한 스트림에서 실시간 및 일괄 처리 기반 파이프라인을 처리할 수 있습니다. 즉, 시간이 지나면서 요구에 따라 확장되는 솔루션을 빌드할 수 있습니다. 향후 실시간 처리를 염두에 두고 현재 일괄 처리 기반 시스템을 빌드 중이든, 기존의 실시간 솔루션에 효율적인 콜드 경로를 추가하려는 경우든 간에 Event Hubs 캡처를 통해 스트리밍 데이터 작업이 더 쉬워집니다.

중요

대상 스토리지(Azure Storage 또는 Azure Data Lake Storage) 계정은 이벤트 허브와 동일한 구독에 있어야 합니다.

Event Hubs 캡처의 작동 방식

Event Hubs는 원격 분석 수신에 대한 시간 보존 지속형 버퍼이며 분산된 로그와 비슷합니다. Event Hubs 크기 조정의 핵심은 분할된 소비자 모델입니다. 각 파티션은 데이터의 독립적인 세그먼트이며 독립적으로 사용됩니다. 시간이 지나면서 이 데이터는 구성 가능한 보존 기간에 따라 에이징됩니다. 결과적으로 지정된 이벤트 허브는 "꽉 참" 상태가 되지 않습니다.

Event Hubs 캡처를 사용하면 캡처된 데이터를 저장하는 데 사용되는 고유한 Azure Blob Storage 계정 및 컨테이너 또는 Azure Data Lake Storage 계정을 지정할 수 있습니다. 이러한 계정은 이벤트 허브와 동일한 지역에 있을 수도 있고 다른 지역에 있을 수도 있으므로 Event Hubs 캡처 기능의 유연성이 향상됩니다.

캡처된 데이터는 Apache Avro 형식으로 작성되는데, 이는 인라인 스키마가 있는 풍부한 데이터 구조를 제공하는 간단하고 빠른 이진 형식입니다. 이 형식은 Hadoop 에코시스템, Stream Analytics 및 Azure Data Factory에서 널리 사용됩니다. Avro 작업에 대한 자세한 내용은 이 문서의 뒷부분을 참조하세요.

캡처 기간 이동

Event Hubs 캡처를 사용하면 기간을 설정하여 캡처를 제어할 수 있습니다. 이 기간은 발견된 첫 번째 트리거에서 캡처 작업이 발생하도록 하는 "첫 번째 우선 정책"이 포함된 최소 크기 및 시간 구성입니다. 15분/100MB 캡처 기간을 사용하고 초당 1MB로 전송할 경우 크기 기간이 시간 기간보다 먼저 트리거됩니다. 각 파티션이 독립적으로 캡처하며, 캡처 시점에 완료된 블록 Blob을 작성하고 캡처 간격이 발생한 시간을 따라 명명합니다. 스토리지 명명 규칙은 다음과 같습니다.

{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}

날짜 값은 0으로 채워집니다. 파일 이름의 예는 다음과 같습니다.

https://mystorageaccount.blob.core.windows.net/mycontainer/mynamespace/myeventhub/0/2017/12/08/03/03/17.avro

Azure Storage BLOB을 일시적으로 사용할 수 없는 이벤트가 발생하면 Event Hubs 캡처가 이벤트 허브에 구성된 데이터 보존 기간 동안 데이터를 보존하고 스토리지 계정을 다시 사용할 수 있게 되면 데이터를 다시 채웁니다.

처리량 단위 또는 처리 단위 크기 조정

Event Hubs의 표준 계층에서 트래픽은 처리량 단위로 제어되고 프리미엄 계층 Event Hubs에서는 처리 단위로 제어됩니다. Event Hubs 캡처는 내부 Event Hubs 스토리지에서 데이터를 직접 복사하여 처리량 단위 또는 처리 단위 송신 할당량을 우회하고 Stream Analytics, Spark 등의 다른 처리 리더를 위해 송신 내용을 저장합니다.

Event Hubs 캡처가 구성되면 첫 번째 이벤트를 전송하는 즉시 자동으로 실행되어 계속 실행됩니다. 다운스트림 처리 시 프로세스가 제대로 작동하는지 쉽게 알 수 있도록 Event Hubs는 데이터가 없을 경우 빈 파일을 작성합니다. 이 프로세스는 일괄 처리 프로세서에 제공할 수 있는 예측 가능한 주기와 표식을 제공합니다.

Event Hubs 캡처 설정

이벤트 허브 생성 시 Azure Portal 또는 Azure Resource Manager 템플릿을 사용하여 캡처를 구성할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

참고

기존 이벤트 허브에 캡처 기능을 사용하도록 설정하면, 해당 기능이 설정된 이벤트 허브에 도착하는 이벤트를 캡처합니다. 해당 기능이 설정되기 전에 이벤트 허브에 있던 이벤트는 캡처하지 않습니다.

캡처된 파일 탐색 및 Avro 작업

Event Hubs 캡처는 구성된 기간에 지정된 대로 Avro 형식의 파일을 만듭니다. Azure Storage Explorer와 같은 도구에서 이러한 파일을 볼 수 있습니다. 파일을 로컬로 다운로드하여 작업할 수 있습니다.

Event Hubs 캡처에서 생성된 파일에는 다음과 같은 Avro 스키마가 있습니다.

Avro 스키마

Avro 파일을 쉽게 탐색하는 방법은 Apache에서 Avro 도구 jar을 사용하는 것입니다. 또한 간단한 SQL 기반 환경에 대한 Apache Drill 또는 Apache Spark를 사용하여 분산된 데이터에서 복잡한 분산 처리를 수행할 수 있습니다.

Apache Drill 사용

Apache Drill은 데이터가 어디에 있든 정형화 및 반정형화 데이터를 쿼리할 수 있는 “빅 데이터 탐색을 위한 오픈 소스 SQL 쿼리 엔진”입니다. 엔진은 독립 실행형 노드 또는 뛰어난 성능을 위한 대규모 클러스터로 실행할 수 있습니다.

다음 설명서에 나온 것처럼 Avro 파일에서 데이터를 손쉽게 쿼리할 수 있는 Azure Blob Storage에 대한 기본 지원이 제공됩니다.

Apache Drill: Azure Blob Storage 플러그 인

캡처된 파일을 손쉽게 쿼리하려면 컨테이너를 통해 Apache Drill을 사용하도록 설정된 VM을 만들고 실행하여 Azure Blob Storage에 액세스할 수 있습니다. 다음 샘플을 참조하세요. Event Hubs 캡처를 사용한 대규모 스트리밍.

Apache Spark 사용

Apache Spark는 “대규모 데이터 처리를 위한 통합형 분석 엔진”입니다. SQL을 비롯한 다른 언어를 지원하며, Azure Blob Storage에 쉽게 액세스할 수 있습니다. Azure에서 Apache Spark를 실행하는 방법은 몇 가지가 있으며, 각 Azure Blob Storage에 손쉽게 액세스할 수 있습니다.

Avro 도구 사용

Avro 도구는 jar 패키지로 제공됩니다. jar 파일을 다운로드한 후 다음 명령을 실행하여 특정 Avro 파일의 스키마를 확인할 수 있습니다.

java -jar avro-tools-1.9.1.jar getschema <name of capture file>

이 명령은 다음을 반환합니다.

{

    "type":"record",
    "name":"EventData",
    "namespace":"Microsoft.ServiceBus.Messaging",
    "fields":[
                 {"name":"SequenceNumber","type":"long"},
                 {"name":"Offset","type":"string"},
                 {"name":"EnqueuedTimeUtc","type":"string"},
                 {"name":"SystemProperties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Properties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Body","type":["null","bytes"]}
             ]
}

또한 Avro 도구를 사용하여 JSON 형식으로 파일을 변환하고 다른 처리를 수행할 수 있습니다.

고급 처리를 수행하려면 선택한 플랫폼에 대한 Avro를 다운로드하고 설치합니다. 이 문서 작성 시점에는 C, C++, C#, Java, NodeJS, Perl, PHP, Python 및 Ruby에 사용 가능한 구현이 있습니다.

Apache Avro에는 JavaPython에 대한 전체 시작 가이드가 있습니다. Event Hubs 캡처 시작 문서를 참조할 수도 있습니다.

Event Hubs 캡처의 요금 부과 방식

Event Hubs 캡처는 처리량 단위(표준 계층) 또는 처리 단위(프리미엄 계층)와 유사하게 시간당 비용으로 측정됩니다. 요금은 네임스페이스에 대해 구입한 처리량 단위 또는 처리 단위 수에 정비례합니다. 처리량 단위 또는 처리 단위가 증가 및 감소함에 따라 성능이 일치하도록 Event Hubs 캡처도 증가 및 감소합니다. 측정은 동시에 발생합니다. 가격 정보는 Event Hubs 가격 책정을 참조하세요.

캡처는 별도로 청구되므로 송신 할당량을 사용하지 않습니다.

Event Grid와 통합

원본으로 Event Hubs 네임스페이스를 사용하여 Azure Event Grid 구독을 만들 수 있습니다. 다음 자습서에서는 이벤트 허브를 원본으로, Azure Functions 앱을 싱크로 사용하여 Event Grid 구독을 만드는 방법을 보여 줍니다. Event Grid 및 Azure Functions를 사용하여 캡처된 Event Hubs 데이터를 Azure Synapse Analytics로 처리 및 마이그레이션.

다음 단계

Event Hubs 캡처는 데이터를 Azure로 가져오는 가장 쉬운 방법입니다. Azure Data Lake, Azure Data Factory 및 Azure HDInsight를 통해 규모에 관계없이 선택한 도구 및 플랫폼을 사용하여 선택한 일괄 처리 및 기타 분석을 수행할 수 있습니다.

Azure Portal 및 Azure Resource Manager 템플릿을 사용하여 이 기능을 사용하도록 설정하는 방법을 알아봅니다.