[MicrosoftDataSchool] 27일차 - Azure Event Hubs

RudinP·어제

Microsoft Data School 3기

목록 보기
29/29
post-thumbnail

Azure Event Hubs

모든 소스에서 모든 대상으로 데이터를 스트리밍할 수 있는 클라우드 네이티브 서비스

핵심 구성 요소

NameSpace

관리 컨테이너. 용량 할당 및 재해 복구 설정 단위
폴더 같은 느낌. 중첩 구조는 아님.

EventHub

추가 전용(Append-only) 분산 로그

Partitions

처리량을 늘리기 위한 확장의 기본 단위

Consumer Group

여러 소비자가 독립적인 속도와 오프셋으로 읽기 수행

생산자에서 소비자로의 흐름 아키텍처


공급자를 통해 메시지 전송된 뒤 이벤트 허브에 저장되고, 최종적으로 컨슈머 그룹에 제공됨.

확장성 및 대용량 메시지 처리

자동 팽창 (Auto-inflate)

사용량 요구에 맞춰 처치량 단위(TU) 자동 확장
다만 비용 관리 면에서 주의해서, 확장 상한선을 정해두어야 한다.
확장시 관리자에게 알림을 보내도록 처리한다던지 하는것이 바람직하다.

Large Message Support

최대 20MB의 이벤트 수용 가능. 작은 세그먼트로 나눌 수 없는 데이터 처리
시스템로그, 이미지 파일 같은 경우를 처리할 때 유용

연결 가능 워크플로

사용 가능한 요금제 - 유연한 계층 및 비용 효율성

Standard

  • 일반적인 스트리밍 요구 사항
  • 엔트리 레벨

Premium

  • 더 높은 처리량
  • 예측 가능한 성능

Dedicated

  • 대규모 전용 용량
  • GB/sec 규모의 미션 크리티컬 워크로드

산업별 주요 활용 사례

게임

실시간 로그 분석을 통한 핵/부정 사용자 감지

제조

스마트 팩토리 설비 이상 징후 모니터링

금융

실시간 트랜잭션 모니터링 및 이상 거래 탐지


Apache Kafka용 Azure Event Hubs

Kafka 워크로드를 위한 서버리스 접근 방식

사용 이유

코드 변경 없는 Apache Kafka 네이티브 호환성

구분직접 구축한 Kafka (Legacy)Azure Event Hubs (Modern)
구성자체 서버 기반 Kafka 클러스터Kafka + Azure Event Hubs
운영 요소Zookeeper 관리, 브로커 구성, 서버 패치 필요Azure 관리형 서비스
운영 비용높음상대적으로 낮음
마이그레이션-Seamless Migration 지원
Kafka 호환성Kafka 자체Kafka 1.0+ 프로토콜 지원
코드 변경-Endpoint 변경만으로 완료
프로토콜 지원Kafka 전용Kafka + Azure Native(AMQP)
확장성/유지보수직접 관리 필요자동 확장 및 관리

마이그레이션 시 환경변수등에서 endpoint만 변경해주면 됨

개념 매핑: Kafka vs. Event Hubs

둘 다 스트리밍 데이터를 위한 파티션 분할 로그

지원되는 Kafka 기능 및 티어

StandardPremiumDedicated
버전1.0이상 지원1.0이상 지원1.0이상 지원
Streams-클라이언트 라이브러리 지원클라이언트 라이브러리 지원
Transactions-트랜잭션 API 지원트랜잭션 API 지원
Compression-Gzip 지원(클라이언트 측 배치)Gzip 지원(클라이언트 측 배치)
Idempotency생산자 및 소비자 멱등성 지원생산자 및 소비자 멱등성 지원생산자 및 소비자 멱등성 지원

AMPQ 소비자는 압축된 Kafka 트래픽을 압축 해제된 메시지로 소비 가능MPQ 소비자는 압축된 Kafka 트래픽을 압축 해제된 메시지로 소비 가능
AMPQ: Advanced Message Queuing Protocol(고급 메시지 큐잉 프로토콜)

중요 고려사항: ksqlDB 및 라이선스

ksqlDB는 Confluent의 독점 라이선스 제품. 라이선스 조건으로 인해 Azure Event Hubs(또는 경쟁 클라우드 서비스)에서는 ksqlDB를 제공하거나 사용할 수 없음.

대안: Azure 네이티브 통합 서비스

다음 통합 서비스를 이용해 SQL 기반 스트림 분석 가능

보안 아키텍처 및 인증 옵션

https://learn.microsoft.com/ko-kr/azure/event-hubs/azure-event-hubs-apache-kafka-overview#oauth-20
모든 전송 데이터는 TLS로 암호화

OAuth 2.0(권장)

Micorosft Entra ID 통합

  • 중앙 집중식 권한 부여 서버
  • Azure RBAC를 통한 세밀한 권한 제어

구성

security.protocol = SASL_SSL
sasl.mechanism = OAUTHBEARER
sasl.jaas.config = org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class = CustomAuthenticateCallbackHandler

SAS 토큰(공유 액세스 서명)

레거시/단순 연결

  • 연결 문자열 기반의 위임된 액세스
  • 키 값 관리에서 노출되면 문제

구성

security.protocol = SASL_SSL
sasl.mechanism = PLAIN
username = "$ConnectionString"
password = {YOUR>EVENTHUBS.CONNECTION>STRING}

주의: 키가 재생성되어도 기존 연결은 끊어지지 않음. 수동 키 관리 필요.

생태계 통합


Azure Event Hubs Schema Registry

이벤트 스트리밍을 위한 중앙 집중식 스키마 관리 및 데이터 무결성 확보

사용하지 않을 시 기존의 문제

구조화된 데이터와 이벤트 브로커 간의 불일치

문제점

분산된 애플리케이션 간의 통신은 주로 데이터를 통해 이루어지지만, 생산자와 소비자 간의 데이터 계약이 명확하지 않으면 대규모 처리 시 안정성이 저하

결과

스키마 관리자 이벤트 데이터 외부에서 이루어지지 않을 경우, 데이터 구조 변경 시 파이프라인이 중단되거나 호환성 문제가 발생

Azure Event Hubs Schema Registry


신뢰할 수 있는 단일 소스

정의

스키마를 위한 중앙 집중식 리포지토리로, 스키마의 등록, 관리 및 진화를 담당

유효성 검사

모든 스키마화된 데이터에 대해 엄격한 유효성 검사를 수행하여 무결성 보장

진화 관리

다양한 호환성 규칙을 적용하여 중단 없는 스키마 진화를 지원

운영 오버헤드 최소화

데이터 일관성 유지

생산자와 소비자 간의 명확한 계약을 통해 데이터 품질 보장

스키마 진화 단순화

비즈니스 요구사항 변화에 따른 데이터 구조 변경을 유연하게 수용

상호 운용성 향상

서로 다른 시스템 간의 원활한 데이터 교환을 지원

네트워크 효율성 증대

전체 스키마 정의 대신 스키마 ID만 전달하여 페이로드 크기를 감소

메시지별 오버헤드 감소 및 전송 효율 죄적화

데이터 흐름과 무결성 검증 프로세스


Producer와 Consumer는 동일한 스키마를 통해 데이터의 무결성을 상호 검증 가능
스키마가 인프라 내부에 안전하게 저장되므로 데이터 해석 오류를 원천 차단

기술 사양 및 지원 에코 시스템

지원 포맷

  • Apache Avro: 압축된 이진형식(모바일)
  • JSON Schema: 웹개발
  • Protobuf: 모바일

클라이언트 라이브러리

  • .NET
  • Java
  • JavaScript
  • Python
  • Kafka Avro

지원 티어 및 관리

  • Standard Tier, Premium Tier, Dedicated Tier
  • Azure Portal을 통해 스키마 레지스트리를 생성하고 관리

Azure Event Hubs Capture

Azure Event Hubs의 스트리밍 데이터를 Azure Blob Storage 또는 Azure Data Lake Storage 계쩡으로 자동 전송하는 기능

Azure Event Hub는 Buffer의 기능이므로, 휘발된다. 따라서 이 데이터를 보관하기 위한 기능.

특징

관리 비용 0에 수렴

Event Hub에서 들어온 데이터를 Storage에 저장, 즉 내부망 이용 → 별도 네트워크 비용 X
Event Hubs 용량에 맞춰 자동으로 확장

간소화된 파이프라인

데이터 로드 과정을 단순화하여 엔지니어가 수집이 아닌 처리에 집중할 수 있게 함

유연한 제어

시간 또는 크기 간격을 지정하여 데이터 저장 시점을 정밀하게 제어

Event Hubs Capture 아키텍처

  • Hot Path: 즉각적인 통찰력 도출을 위한 경로
  • Cold Path: 장기 보관 및 배치 분석을 위한 경로
  • 확장성: 아키텍처 변경 없이 나중에 실시간 처리를 추가하거나 배치 시스템 확장 가능

Event Hubs와 Capture는 같은 구독에 있어야 함
SSD를 사용하는 프리미엄 플랜 지원 X

작동 원리: 데이터 흐름과 아키텍처


1. 수집: 원격 분석 데이터가 분산 로그 형태의 내구성 있는 버퍼로 유입
2. 파티셔닝: 각 파티션은 독립적인 데이터 세그먼트로 작동하여 확장성 보장
3. 캡처: 설정된 정책에 따라 Storage로 데이터를 자동 기록, 데이터는 영구 보존
4. 분석: 저장된 데이터는 Azure Stream Analytics, HDInsight 등에서 활용

캡처 윈도우(Windowing) 정책

First Wins(선착순) 정책: 크기 vs 시간

예시 설정: 시간 윈도우 15분 vs 크기 윈도우 100MB (데이터 유입 속도: 1MB/Sec)

작동 방식: 두 조건 중 먼저 충족되는 조건이 캡처를 트리거
결과: 1분 40초 시점에 100MB가 먼저 충족되므로, 5분을 기다리지 않고 즉시 파일 생성

확장성 및 처리량 관리

자동 확장

Event Hubs의 용량이 확장됨에 따라 Capture 성능도 자동으로 확장

송신 효율성

Capture 트래픽은 처리량 단위의 송신 할당량을 소모하지 않음
Stream Analytics나 Spark와 같은 다른 Reader를 위한 대역폭이 온전히 보존

파일 명명 규칙 및 디렉터리 구조

블롭 이름은 캡처 간격이 발생한 정확한 시점을 반영하며, 날짜 및 시간 값은 0으로 채워짐

Format String

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

Example URL

https://mystorage.blob.core.window.net/container/mynamespace/myeventhub/2026/01/18/03/03/17.avro


Azure Portal을 사용하여 Event Hub 생성

Producer에서 메시지 아웃바운딩을 통해 Event Hub로 보내는 실습

리소스 그룹 생성

Event Hubs 네임스페이스 생성

Event Hubs 네임스페이스는 Event Hub를 포함하는 상위 개념
1. Azure Portal의 왼쪽 메뉴에서 모든서비스 선택
2. EventHubs를 검색하고 선택

Event Hub 생성


Azure Functions를 사용하여 Event Hubs 전달

Github 토큰 데이터 가져오기

강의에서 제공된 샘플 코드 데이터를 git clone 했다.
이 과정에서 github_pat.txt 파일을 사용했다.

git clone https://{pat파일 내용 붙여넣기}@{github주소봍북}

local.settings.json 추가

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJosbStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "python",
        "SolarEventHubName":"",
        "SolarEventHubConnectionString":""
    }
}

Event Hubs 연결 문자열 설정


1. 리소스 그룹 내의 Event Hubs 네임스페이스 페이지에 접속
2. 좌측 설정 - 공유 액세스 정책
3. Primary connection string(기본 연결 문자열)
4. "SolarEventHubConnectionString" 에 넣기
5. "SolarEventHubName" 에 Event Hubs Namespace 이름 입력

Azure Function 실행

  1. 가상환경 생성(`py -3.11 -m venv .venv 후 .venv/Scripts/activate)
  2. F1 azurite start
  3. F5로 실행
  4. 왼쪽 패널의 Azure 탭 선택
  5. "WORKSPACE Local' 클릭
  6. eventhub_trigger 함수에서 마우스 오른쪽 클릭 → Execute Function Now 선택(혹은 리턴된 http 주소를 열거나, postman을 사용해도 무방)


7. 요청 본문에 {"name":"Solar Energy"} 입력 후 실행

Event Hub 데이터 전송 확인


1. Azure Portal의 EventHubs 네임스페이스 개요 페이지에서 EventHub 클릭

  1. Data Explorer 메뉴 선택

  2. 이벤트 보기

  3. 이벤트 본문 확인


복습 문제


태양광 발전량 예측 API 연동

웹 훅

다른 애플리케이션이나 서비스와의 통합을 위한 HTTP 호출 지점
특정 이벤트가 발생했을 때 자동으로 지정된 URL로 데이터를 전송하는 프로세스

장점

실시간 알림

  • 데이터 업데이트를 즉시 Teams 채널로 전송
  • 팀원 간 빠른 의사소통 촉진

자동화

반복적인 작업을 자동화하여 업무 효율성 향상

유연한 통합

  • 다양한 시스템과의 통합이 용이
  • 여러 비즈니스 프로세스를 연결하는데 효과적

API 연동 아키텍처


태양광 발전량 예측 데이터 수집 프로그램 실습

태양광 발전량 예측 API, Azure Functions, Event Hubs를 연동해 태양광 발전량 예측 데이터 수집

Teams 채널 만들기

워크플로 추가하기

  1. 팝업창에서 '앱 검색' 검색창 클릭
  2. 검색창에 workflows 검색
  3. workflows 카드 선택

새 흐름 빌드하기

  1. 새 흐름 버튼 클릭

  2. 자동화된 클라우드 흐름 버튼 클릭

  3. 건너뛰기

  4. 웹 후크 검색

  5. Teams 웹후크 요청이 수신된 경우 클릭

  6. Anyone 입력

Teams 웹 훅 채널 메시지 추가하기

  1. 새 단계 버튼 클릭

  2. 작업 선택 폼에서 Microsoft Teams 버튼 클릭

  3. 채팅 또는 채널에서 메시지 게시 클릭

  4. 채팅 또는 채널에서 메시지 게시 폼에 입력

Teams 웹 훅 설정 완료하기

  1. 저장 클릭
  2. When a Teams webhook request is received 패널 클릭
  3. HTTP POST URL 필드에 복사 아이콘 클릭

웹 훅 테스트

  1. Windows - cmd - curl -X POST "웹 훅 주소"
  2. Teams에서 웹 훅 알림을 설정한 팀, 채널 선택
  3. 웹 훅 메시지 확인

이후 저장된 웹 훅은 채널 자체의 PowerAutomate 탭이 아닌, 더보기의 워크플로우에서 볼 수 있다.

샘플 코드 깃헙에서 받기

동일하게 github pat 사용

local.settings.json 추가

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJosbStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "SolarEventHubName": "",
    "SolarEventHubConnectionString": "",
    "AzureWebHookUrl": ""
  }
}

가상환경 설정

py -3.11 venv .venv
.venv/Scripts/activate
pip install -r requirements.txt

실행

  1. F1후 start azurite

  2. F5

  3. 좌측 local에서 함수 우클릭 후solar_predict_event_scheduler 에서 마우스 오른쪽 버튼

  4. Execute Function Now 클릭

  5. 터미널에서 태양광 발전량 예측 데이터 수집 스케줄러 로그 확인

  6. 팀즈에서 웹훅 메시지 확인

  7. EventHub에서 태양광 발전량 예측 API 데이터 확인하기

Azure에서 함수 앱 생성

Deploy

VSCode 에서 F1 → deploy → 우측하단 upload settings(혹은 f1 → upload settings)

azure portal에서 환경변수 설정 (만약 upload settings를 안했다면)

함수 실행 확인


Event Hub 확인

기존 워크플로에서 Json 구문 분석 기능 추가하여 메시지를 코드로 보내보기




profile
iOS 개발자가 되기 위한 스터디룸/스터디의 레퍼런스는 모두 kxcoding

0개의 댓글