편집

다음을 통해 공유


완전 관리형 오픈 소스 데이터 엔진을 통한 스트림 처리

Azure Event Hubs
AKS(Azure Kubernetes Service)
Azure Cosmos DB
Azure Database for PostgreSQL
Azure Cache for Redis

이 문서에서는 완전 관리형 Azure 데이터 서비스를 사용하는 스트리밍 솔루션의 예제를 제공합니다.

아키텍처

스트리밍 데이터가 시스템을 통해 흐르는 방식을 보여 주는 아키텍처 다이어그램. Kafka, Kubernetes, Cassandra, PostgreSQL 및 Redis 구성 요소가 시스템을 구성합니다.

이 아키텍처의 [Visio 파일][Visio 버전의 아키텍처 다이어그램]을 다운로드합니다.

워크플로

  1. Apache Kafka 기능에 대한 이벤트 허브는 Kafka 생산자의 이벤트를 스트리밍합니다.

  2. Apache Spark는 이벤트를 사용합니다. AKS(Azure Kubernetes Service)는 Apache Spark 작업에 대한 관리되는 환경을 제공합니다.

  3. Azure Cosmos DB for Apache Cassandra를 사용하는 애플리케이션은 Cassandra에 이벤트를 씁니다. 이 데이터베이스는 이벤트에 대한 스토리지 플랫폼 역할을 합니다. AKS는 Cassandra에 쓰는 마이크로 서비스를 호스트합니다.

  4. Azure Cosmos DB의 변경 피드 기능은 실시간으로 이벤트를 처리합니다.

  5. 예약된 애플리케이션은 Cassandra에 저장된 이벤트에서 일괄 처리 지향적인 처리 작업을 실행합니다.

  6. 참조 데이터 저장소는 이벤트 정보를 보강해 줍니다. 일괄 처리 지향적인 애플리케이션은 보강된 이벤트 정보를 PostgreSQL에 씁니다. 일반적인 참조 데이터 저장소는 다음과 같습니다.

    • [Azure Data Lake Storage][Parquet][Parquet]과 같은 개방형 형식으로 데이터를 저장할 수 있는 [Azure Data Lake Storage Gen2 소개].
    • [PostgreSQL][Azure Database for PostgreSQL이란?] 같은 오픈 소스 관계형 데이터 저장소 및 [MySQL][Azure Database for MySQL이란?].
  7. 일괄 처리 지향적인 애플리케이션은 Cassandra 데이터를 처리합니다. 해당 애플리케이션은 처리된 데이터를 Azure Database for PostgreSQL에 저장합니다. 이 관계형 데이터 저장소는 보강된 정보가 필요한 다운스트림 애플리케이션에 데이터를 제공합니다.

  8. 보고 애플리케이션 및 도구는 PostgreSQL 데이터베이스 데이터를 분석합니다. 예를 들어 [Power BI][Power BI란?] 는 Azure Database for PostgreSQL 커넥터를 사용하여 데이터베이스에 연결합니다. 그러면 이 보고 서비스에서 데이터의 풍부한 시각적 개체를 표시합니다.

  9. Azure Cache for Redis는 메모리 내 캐시를 제공합니다. 이 솔루션에서 캐시는 중요한 이벤트에 대한 데이터를 포함합니다. 애플리케이션은 캐시에 데이터를 저장하고 캐시에서 데이터를 검색합니다.

  10. 웹 사이트 및 기타 애플리케이션은 캐시된 데이터를 사용하여 응답 시간을 개선합니다. 캐시에서 데이터를 사용할 수 없는 경우가 있습니다. 이러한 경우 이러한 애플리케이션은 [캐시 배제 패턴][캐시 배제 패턴] 또는 유사한 전략을 사용하여 Azure Cosmos DB의 Cassandra에서 데이터를 검색합니다.

구성 요소

  • Event Hubs는 초당 수백만 개의 이벤트를 처리할 수 있는 완전 관리형 스트리밍 플랫폼입니다. Event Hubs는 널리 사용되는 오픈 소스 스트림 처리 플랫폼인 Apache Kafka에 [ 엔드포인트][Apache Kafka 애플리케이션에서 Azure Event Hubs 사용]을 제공합니다. 조직에서 엔드포인트 기능을 사용하는 경우 스트림을 처리하기 위해 Kafka 클러스터를 빌드하고 유지 관리할 필요가 없습니다. 대신 Event Hubs에서 제공하는 완전 관리형 Kafka 구현을 활용할 수 있습니다.

  • [Azure Cosmos DB][Azure Cosmos DB 시작]은 다중 마스터 복제를 제공하는 완전히 관리되는 NoSQL 및 관계형 데이터베이스입니다. Azure Cosmos DB는 많은 데이터베이스, 언어 및 플랫폼에 대해 오픈 소스 API를 지원합니다. 다음은 이러한 템플릿의 예입니다.

    • Apache Cassandra.
    • [그렘린][Gremlin Graph 순회 컴퓨터 및 언어].
    • [MongoDB][MongoDB].

    [Apache Cassandra용 Azure Cosmos DB][Apache Cassandra용 Azure Cosmos DB 소개]를 통해 Apache Cassandra 도구, 언어 및 드라이버를 사용하여 Azure Cosmos DB 데이터에 액세스할 수 있습니다. Apache Cassandra는 쓰기 집약적 워크로드에 적합한 오픈 소스 NoSQL 데이터베이스입니다.

  • AKS(Azure Kubernetes Service) 는 고가용성, 보안 및 완전 관리형 Kubernetes 서비스입니다. [Kubernetes][Kubernetes]는 컨테이너화된 워크로드를 관리하기 위한 빠르게 진화하는 오픈 소스 플랫폼입니다. AKSApache Spark와 같은 오픈 소스 빅 데이터 처리 엔진을 호스트합니다. AKS를 사용하면 관리되는 환경에서 대규모 스트림 처리 작업을 실행할 수 있습니다.

  • Azure Database for PostgreSQL은 완전히 관리되는 관계형 데이터베이스 서비스입니다. [고가용성, 탄력적 크기 조정, 패치 및 기타 관리 기능][Azure Database for PostgreSQL이란?] PostgreSQL의 경우 [PostgreSQL][PostgreSQL]은 널리 채택된 오픈 소스 관계형 데이터베이스 관리 시스템입니다.

  • Azure Cache for Redis에서는 Redis 소프트웨어를 기반으로 하는 메모리 내 데이터 저장소를 제공합니다. [Redis][Redis]는 인기 있는 오픈 소스 메모리 내 데이터 저장소입니다. 세션 저장소, 콘텐츠 캐시 및 기타 스토리지 구성 요소는 Redis를 사용하여 성능과 확장성을 향상시킵니다. Azure Cache for Redis는 완전 관리형 제품으로 오픈 소스 Redis 기능을 제공합니다.

대안

이 솔루션의 오픈 소스 호환 제품과 서비스를 다른 제품 및 서비스로 대체할 수 있습니다. Azure에서 사용할 수 있는 오픈 소스 서비스에 대한 자세한 내용은 [Azure의 오픈 소스][Azure의 오픈 소스]를 참조하세요.

시나리오 정보

오픈 소스 엔진을 실행하는 완전 관리형 Azure 데이터 서비스는 다음과 같이 이 스트리밍 솔루션을 구성합니다.

  • Azure Event Hubs는 스트림을 수집하기 위해 Kafka를 구현합니다.
  • Azure Cosmos DB는 Cassandra에서 이벤트 스토리지를 지원합니다.
  • AKS는 스트림 처리를 위해 [Kubernetes][Kubernetes] 마이크로 서비스를 호스트합니다.
  • Azure Database for PostgreSQL은 [PostgreSQL][PostgreSQL]에서 관계형 데이터 스토리지를 관리합니다.
  • Azure Cache for Redis는 [Redis][Redis] 메모리 내 데이터 저장소를 관리합니다.

오픈 소스 기술은 여러 가지 이점을 제공합니다. 예를 들어 조직은 오픈 소스 기술을 사용해 다음을 수행할 수 있습니다.

  • 기존 워크로드 마이그레이션
  • 광범위한 오픈 소스 커뮤니티 활용
  • 공급업체 잠금 효과 제한

오픈 소스 기술에 액세스할 수 있게 하면 Azure 도구 및 서비스를 통해 조직에서 이러한 이점을 활용하고 선택한 솔루션을 개발할 수 있습니다.

이 솔루션은 완전히 관리되는 [PaaS(Platform as a Service)][PaaS란?] 이러한 현상이 더욱 두드러집니다. 이에 따라 Microsoft는 패치, SLA(서비스 수준 계약) 유지 관리 및 기타 관리 작업을 처리합니다. 또 다른 이점은 Azure 보안 인프라와 네이티브 통합된다는 것입니다.

잠재적인 사용 사례

이 솔루션은 다음과 같은 다양한 시나리오에 적용됩니다.

  • Azure PaaS 서비스를 사용하여 오픈 소스 기술을 이용하는 최신 스트리밍 솔루션 빌드
  • Azure로 오픈 소스 스트림 처리 솔루션 마이그레이션

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

모범 사례를 염두에 두고 각 서비스를 디자인하고 구현합니다. 각 서비스에 대한 지침은 Microsoft 설명서 사이트를 참조하세요. 또한 다음 섹션의 정보를 검토합니다.

성능

  • [Azure Database for PostgreSQL에 대한 연결 풀링][Azure Database for PostgreSQL – 연결 풀링을 사용하기 위한 성능 모범 사례]를 구현합니다. 애플리케이션 내에서 연결 풀링 라이브러리를 사용할 수 있습니다. 또는 [PgBouncer][PgBouncer] 또는 [Pgpool][Pgpool Wiki]와 같은 연결 풀러를 사용할 수 있습니다. PostgreSQL과 연결하는 것은 비용이 많이 드는 작업입니다. 연결 풀링을 사용하면 애플리케이션 성능 저하를 방지할 수 있습니다. PgBouncer는 Azure Database for PostgreSQL 유연한 서버의 [기본 제공][Azure Database for PostgreSQL 유연한 서버의 PgBouncer]입니다.

  • 적절한 [분할 전략][Apache Cassandra용 Azure Cosmos DB에서 분할]을 사용하여 최상의 성능을 위해 Apache Cassandra용 Azure Cosmos DB를 구성합니다. 테이블을 분할할 때 단일 필드 기본 키, 복합 기본 키 또는 복합 파티션 키를 사용할지 결정합니다.

확장성

  • [Event Hubs 계층][Event Hubs 가격 책정]을 선택할 때 스트리밍 요구 사항을 고려합니다.

    • 120MBps 미만의 중간 범위 처리량 요구 사항의 경우 [프리미엄 계층][Event Hubs Premium 개요(미리 보기)]를 고려하세요. 이 계층은 스트리밍 요구 사항에 맞게 탄력적으로 스케일링됩니다.
    • 데이터 수신이 기가바이트인 고급 스트리밍 워크로드의 경우 [전용 계층][Event Hubs Dedicated 개요]를 고려하세요. 이 계층은 용량이 보장되는 단일 테넌트 제품입니다. 전용 클러스터를 스케일 업/다운할 수 있습니다.
  • 워크로드가 예측할 수 없고 뾰족한 경우 Azure Cosmos DB에 대해 [자동 크기 조정 프로비전된 처리량][자동 크기 조정 처리량을 사용하여 Azure Cosmos 컨테이너 및 데이터베이스 만들기]를 고려합니다. 수동으로 프로비전된 처리량 또는 자동으로 크기가 조정되는 프로비전된 처리량을 사용하도록 Azure Cosmos DB를 구성할 수 있습니다. 자동 크기 조정을 사용하면 Azure에서 사용량에 따라 초당 요청 단위의 크기를 자동으로 즉시 조정합니다.

보안

우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.

  • [Azure Private Link][Azure Private Link란?] 사용 Azure 서비스를 가상 네트워크의 일부로 만듭니다. Private Link를 사용하는 경우 서비스와 네트워크 간의 트래픽이 공용 인터넷을 통과하지 않고 Azure 백본을 통해 흐릅니다. 이 솔루션의 Azure 서비스에서는 선택한 SKU에 대한 Private Link를 지원합니다.

  • 조직의 보안 정책을 확인합니다. Azure Cosmos DB for Apache Cassandra를 사용하면 키를 통해 키 공간 및 테이블과 같은 리소스에 액세스할 수 있습니다. Azure Cosmos DB 인스턴스는 이러한 키를 저장합니다. 보안 정책을 사용하려면 [해당 키를 키 관리 서비스로 전파][Azure Key Vault를 사용하여 Azure Cosmos 키 보호](예: Azure Key Vault)를 사용해야 할 수 있습니다. 또한 조직의 정책에 따라 [키 회전][키 회전 및 재생성]을 확인해야 합니다.

복원력

가용성 영역을 사용하여 데이터 센터의 오류로부터 중요 비즈니스용 애플리케이션을 보호하는 것이 좋습니다. 이 솔루션의 서비스는 가용성 영역 사용 지역에서 선택한 SKU에 대한 가용성 영역을 지원합니다. 최신 정보는 가용성 영역을 지원하는 서비스 목록을 검토하세요.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

이 솔루션의 비용을 예측하려면 Azure 가격 계산기를 사용합니다. 또한 다음 사항에 유의하세요.

  • [Event Hubs][Event Hubs 가격 책정]은 기본, 표준, 프리미엄 및 전용 계층에서 사용할 수 있습니다. 프리미엄 또는 전용 계층은 대규모 스트리밍 워크로드에 가장 적합합니다. 처리량을 스케일링할 수 있으므로, 작은 크기로 시작해서 수요 증가에 따라 스케일 업하는 것이 좋습니다.

  • Azure Cosmos DB는 다음의 두 가지 모델을 제공합니다.

    • 까다로운 워크로드에 이상적인 프로비전된 처리량 모델입니다. 이 모델은 표준 및 자동 크기 조정이라는 두 가지 용량 관리 옵션에서 사용할 수 있습니다.
    • 작고 급증하는 워크로드를 실행하는 데 적합한 서버리스 모델입니다.
  • AKS 클러스터는 Azure에서 실행되는 일련의 노드 또는 VM(가상 머신)으로 구성됩니다. 컴퓨팅, 스토리지 및 네트워킹 구성 요소의 비용이 클러스터의 기본 비용을 구성합니다.

  • Azure Database for PostgreSQL 은 단일 서버 및 유연한 서버 계층에서 사용할 수 있습니다. 다양한 계층은 예측 가능하고 버스트 가능한 고성능 워크로드와 같은 다양한 시나리오를 충족합니다. 비용은 주로 컴퓨팅 노드 및 스토리지 용량의 선택에 따라 달라집니다. 새 워크로드의 경우 단일 서버 계층에 대한 [지원되는 기능][단일 서버와 유연한 서버 간 비교]의 범위가 넓기 때문에 유연한 서버 계층을 선택하는 것이 좋습니다. 또한 단일 서버는 사용 중단 경로에 있습니다.

  • Azure Cache for Redis는 여러 계층에서 사용할 수 있습니다. 이러한 계층은 250MB에서 수테라바이트에 이르는 캐시를 수용합니다. 크기 외에 다른 요구 사항도 계층 선택에 영향을 줍니다.

    • Clustering
    • 지속성
    • 활성 지리적 복제

시나리오 배포

이 솔루션을 배포할 때에는 다음 사항에 유의하세요.

  • Kafka용 Event Hubs를 배포하는 경우 [빠른 시작: Kafka 프로토콜을 사용하여 Event Hubs를 사용한 데이터 스트리밍][빠른 시작: Kafka 프로토콜을 사용하여 Event Hubs로 데이터 스트리밍]을 참조하세요. 이 문서에서는 다음 정보를 제공합니다.

    • Event Hubs에서 Kafka를 사용하여 메시지를 주고받는 방법
    • 게시 애플리케이션용 샘플 코드
    • 구성을 변경하여 기존 Kafka 애플리케이션을 Kafka용 Event Hubs로 전환하는 방법
  • Apache Spark 관련:

    • 기본 Spark 애플리케이션을 빌드하는 방법에 대한 자세한 내용은 [Azure Event Hubs를 사용하여 Apache Spark 애플리케이션 연결][Azure Event Hubs를 사용하여 Apache Spark 애플리케이션 연결]을 참조하세요.
    • AKS에서 Spark 애플리케이션을 호스트하려면 [AKS에서 Apache Spark 작업 실행][AKS에서 Apache Spark 작업 실행]을 참조하세요.
  • Java 애플리케이션을 사용하여 Cassandra에 이벤트를 쓰는 것이 좋습니다. 자세한 내용은 [빠른 시작: Apache Cassandra 데이터용 Azure Cosmos DB를 관리하는 Java 앱 빌드(v4 드라이버)][빠른 시작: Apache Cassandra 데이터용 Azure Cosmos DB를 관리하는 Java 앱 빌드(v4 드라이버)]를 참조하세요.

  • [Azure Cosmos DB 변경 피드][Azure Cosmos DB의 변경 피드]를 사용하는 경우 [Azure Cosmos DB for Apache Cassandra의 변경 피드][Azure Cosmos DB for Apache Cassandra의 변경 피드]를 참조하세요.

    • [Cassandra CQL(쿼리 언어)][Cassandra 쿼리 언어]에서 쿼리 조건자를 사용하여 변경 피드 API를 쿼리하는 방법
    • Java 애플리케이션용 샘플 코드
  • Cassandra에 저장한 이벤트를 처리하는 방법에 대한 자세한 내용은 [자습서: Apache Cassandra용 Azure Cosmos DB의 데이터 쿼리][자습서: Azure Cosmos DB for Apache Cassandra의 데이터 쿼리]를 참조하세요. 이 문서에는 CQL 명령을 사용하여 테이블에서 데이터를 검색하기 위한 샘플 Java 코드도 포함되어 있습니다.

  • 일괄 처리 지향 애플리케이션을 사용하여 Azure Database for PostgreSQL에 데이터를 쓰는 방법에 대한 자세한 내용은 [빠른 시작: Azure Database for PostgreSQL에서 Java 및 JDBC 사용][빠른 시작: Azure Database for PostgreSQL에서 Java 및 JDBC 사용]을 참조하세요. 이 문서에는 데이터를 저장하기 위한 샘플 Java 코드도 포함되어 있습니다.

  • Azure Cache for Redis를 사용한 데이터 스토리지 및 검색에 대한 자세한 내용은 [빠른 시작: Java에서 Azure Cache for Redis 사용][빠른 시작: Java에서 Azure Cache for Redis 사용]을 참조하세요. 이 문서에는 캐시에 액세스하기 위한 샘플 Java 코드도 포함되어 있습니다.

참가자

이 문서는 Microsoft에서 업데이트 및 유지 관리 중입니다. 원래 다음 기여자가 작성했습니다.

보안 주체 작성자:

다음 단계

관련 솔루션에 대해 자세히 알아보려면 다음 정보를 참조하세요.

[캐시 배제 패턴]: .. /.. /patterns/cache-aside.yml [Cassandra 쿼리 언어(CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra 쿼리 언어]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Azure Cosmos DB의 변경 피드]: /azure/cosmos-db/change-feed [변경 Apache Cassandra용 Azure Cosmos DB의 피드]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Azure에서 분석 데이터 저장소 선택]: .. /.. /data-guide/technology-choices/analytical-data-stores.md [Azure에서 데이터 분석 기술 선택]: .. /.. /data-guide/technology-choices/analysis-visualizations-reporting.md [Azure Event Hubs를 사용하여 Apache Spark 애플리케이션 연결]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [자동 크기 조정 처리량을 사용하여 Azure Cosmos 컨테이너 및 데이터베이스 만들기]: /azure/cosmos-db/provision-throughput-autoscale [AKS를 사용하여 데이터 스트리밍]: .. /.. /solution-ideas/articles/data-streaming-scenario.yml [Event Hubs 가격 책정]: https://azure.microsoft.com/pricing/details/event-hubs [Apache Cassandra용 Azure Cosmos DB에 대한 질문과 대답]: /azure/cosmos-db/cassandra/cassandra-faq [Gremlin Graph Traversal 컴퓨터 및 언어]: https://tinkerpop.apache.org/gremlin.html [Gremlin Graph 순회 컴퓨터 및 언어]: https://tinkerpop.apache.org/gremlin.html [Apache Cassandra용 Azure Cosmos DB 소개]: /azure/cosmos-db/cassandra/cassandra-introduction [Azure Data Lake Storage Gen2 소개]: /azure/storage/blob/data-lake-storage-introduction [키 회전 및 재생성]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB ]: https://www.mongodb.com [Azure의 오픈 소스]: https://azure.microsoft.com/overview/open-source/ [Event Hubs Dedicated 개요]: /azure/event-hubs/event-hubs-dedicated-overview [Event Hubs Premium 개요(미리 보기)]: /azure/event-hubs/event-hubs-premium-overview [Parquet]: https://parquet.apache.org [Apache Cassandra용 Azure Cosmos DB에서 분할]: /azure/cosmos-db/cassandra/cassandra-partitioning [Azure Database for PostgreSQL – 연결 풀링 사용에 대한 성능 모범 사례]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling [PgBouncer]: [Pgpool Wiki]: https://www.pgbouncer.org https://www.pgpool.net/mediawiki/index.php/Main_Page [PostgreSQL ]: https://www.postgresql.org [빠른 시작: Apache Cassandra 데이터용 Azure Cosmos DB를 관리하는 Java 앱 빌드(v4 드라이버)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [빠른 시작: Kafka 프로토콜을 사용하여 Event Hubs로 데이터 스트리밍]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [빠른 시작: Java에서 Azure Cache for Redis 사용]: /azure/azure-cache-for-redis/cache-java-get-started [빠른 시작: Azure Database for PostgreSQL에서 Java 및 JDBC 사용]: /azure /postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [AKS에서 Apache Spark 작업 실행]: /azure/aks/spark-job [Azure Key Vault를 사용하여 Azure Cosmos 키 보호]: /azure/cosmos-db/access-secrets-from-keyvault [자습서: 쿼리 데이터 From Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Apache Kafka 애플리케이션에서 Azure Event Hubs 사용]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Visio 버전 아키텍처 다이어그램]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Azure Cosmos DB 시작]: /azure/cosmos-db/introduction [Azure Database for MySQL이란?]: /azure/mysql/overview [Azure Database for PostgreSQL이란?]: /azure/postgresql/overview [Azure Private Link란?]: /azure/private-link/private-link-overview [PaaS란?]: https://azure.microsoft.com/overview/what-is-paas/ [Power BI란?]: /power-bi/fundamentals/power-bi-overview [단일 서버와 유연한 서버 간의 비교]: /azure/postgresql/flexible -server/concepts-compare-single-server-flexible-server#comparison-table [Azure Database for PostgreSQL 유연한 서버의 PgBouncer]: /azure/postgresql/flexible-server/concepts-pgbouncer