Gunakan Streaming Terstruktur Apache Spark dengan Apache Kafka dan Microsoft Azure Cosmos DB

Pelajari cara menggunakan Apache SparkStreaming Terstruktur untuk membaca data dari Apache Kafka di Azure HDInsight, lalu menyimpan data ke Azure Cosmos DB.

Microsoft Azure Cosmos DB adalah database multi-model yang terdistribusi secara global. Contoh ini menggunakan model database SQL API. Untuk informasi selengkapnya, lihat dokumen Selamat Datang di Microsoft Azure Cosmos DB.

Streaming terstruktur Spark adalah mesin pemrosesan aliran yang dibangun di Spark SQL. Ini memungkinkan Anda untuk menyatakan komputasi streaming dengan cara yang sama seperti komputasi batch pada data statis. Untuk informasi selengkapnya tentang Streaming Terstruktur, lihat Panduan Pemrograman Streaming Terstruktur di Apache.org.

Penting

Contoh ini menggunakan Spark 2.2 pada Microsoft Azure HDInsight 3.6.

Langkah-langkah dalam dokumen ini membuat grup sumber daya Azure yang memuat Spark di Microsoft Azure HDInsight dan Kafka di kluster Microsoft Azure HDInsight. Kedua kluster ini terletak di dalam Azure Virtual Network, yang memungkinkan kluster Spark untuk langsung berkomunikasi dengan kluster Kafka.

Bila Anda sudah menyelesaikan langkah-langkah dalam dokumen ini, jangan lupa hapus kluster untuk menghindari biaya berlebih.

Buat kluster

Apache Kafka di Azure HDInsight tidak menyediakan akses ke broker Kafka melalui internet publik. Apa pun yang berkaitan dengan Kafka harus berada di jaringan virtual Azure yang sama dengan simpul di kluster Kafka. Dalam contoh ini, kluster Kafka dan Spark terletak di jaringan virtual Azure. Diagram berikut menunjukkan bagaimana komunikasi mengalir antara kluster-kluster:

Diagram of Spark and Kafka clusters in an Azure virtual network

Catatan

Layanan Kafka terbatas pada komunikasi dalam jaringan virtual. Layanan lain pada kluster, seperti SSH dan Ambari, dapat diakses melalui internet. Untuk informasi selengkapnya tentang port publik yang tersedia dengan Microsoft Azure HDInsight, lihat Port dan URI yang digunakan oleh Microsoft Azure HDInsight.

Meskipun Anda dapat membuat kluster jaringan virtual Azure, Kafka, dan Spark secara manual, hal ini lebih mudah menggunakan templat Azure Resource Manager. Gunakan langkah-langkah berikut untuk menggunakan kluster jaringan virtual Azure, Kafka, dan Spark ke langganan Azure Anda.

  1. Gunakan tombol berikut untuk masuk ke Azure dan buka templat di portal Microsoft Azure.

    Deploy to Azure

    Templat Azure Resource Manager terletak di repositori GitHub untuk proyek ini (https://github.com/Azure-Samples/hdinsight-spark-scala-kafka-cosmosdb).

    Templat ini membuat sumber daya berikut:

    • Kafka pada kluster Microsoft Azure HDInsight 3.6.

    • Spark 3.6 pada kluster Microsoft Azure HDInsight 3.6.

    • Microsoft Azure Virtual Network yang memuat kluster Microsoft Azure HDInsight. Jaringan virtual yang dibuat oleh templat menggunakan ruang alamat 10.0.0.0/16.

    • Database Microsoft Azure Cosmos DB SQL API.

    Penting

    Buku notebook streaming terstruktur yang digunakan dalam tutorial ini memerlukan Spark 3.6 pada Microsoft Azure HDInsight 3.6. Jika Anda menggunakan versi Spark yang lebih lama pada Microsoft Azure HDInsight, Anda menerima kesalahan saat menggunakan notebook tersebut.

  2. Gunakan panduan berikut untuk mengisi entri pada bagian Penyebaran kustom:

    Properti Nilai
    Langganan Pilih langganan Azure Anda.
    Grup sumber daya Buat Grup atau pilih yang sudah ada. Grup ini berisi kluster Microsoft Azure HDInsight.
    Nama Akun Cosmos DB Nilai ini digunakan sebagai nama untuk akun Cosmos DB. Nama hanya bisa berisi huruf kecil, angka, dan karakter tanda hubung (-). Panjang nama pengguna harus antara 3-31 karakter.
    Nama Kluster Dasar Nilai ini digunakan sebagai nama dasar untuk kluster Spark dan Kafka. Misalnya, memasukkan myhdi buat klaster Spark bernama spark-myhdi dan kluster Kafka bernama kafka-myhdi.
    Versi Kluster Microsoft Azure HDInsight versi kluster. Contoh ini diuji dengan Microsoft Azure HDInsight 3.6, dan mungkin tidak berfungsi dengan jenis kluster lainnya.
    Nama Pengguna Masuk Kluster Nama pengguna admin untuk kluster Spark dan Kafka.
    Kata Sandi Masuk Kluster Kata sandi pengguna admin untuk kluster Spark dan Kafka.
    Nama Pengguna Ssh Pengguna SSH untuk membuat untuk kluster Spark dan Kafka.
    Kata Sandi Ssh Kata sandi untuk pengguna SSH untuk kluster Spark dan Kafka.

    HDInsight custom deployment values

  3. Baca Syarat dan Ketentuan, lalu pilih Saya menyetujui syarat dan ketentuan yang tercantum di atas.

  4. Terakhir, pilih Beli. Mungkin perlu waktu hingga 45 menit untuk membuat kluster, jaringan virtual, dan akun Cosmos DB.

Jika benar, buat database dan koleksi Microsoft Azure Cosmos DB

Proyek yang digunakan dalam dokumen ini menyimpan data di Microsoft Azure Cosmos DB. Sebelum menjalankan kode, Anda harus terlebih dahulu membuat database dan koleksi di instans Microsoft Azure Cosmos DB Anda. Anda juga harus mengambil titik akhir dokumen dan kunci yang digunakan untuk mengautentikasi permintaan ke Microsoft Azure Cosmos DB.

Salah satu cara untuk melakukan ini adalah dengan menggunakan Azure CLI. Skrip berikut akan membuat database bernama kafkadata dan koleksi bernama kafkacollection. Kemudian mengembalikan kunci primer.

#!/bin/bash

# Replace 'myresourcegroup' with the name of your resource group
resourceGroupName='myresourcegroup'
# Replace 'mycosmosaccount' with the name of your Cosmos DB account name
name='mycosmosaccount'

# WARNING: If you change the databaseName or collectionName
#          then you must update the values in the Jupyter Notebook
databaseName='kafkadata'
collectionName='kafkacollection'

# Create the database
az cosmosdb sql database create --account-name $name --name $databaseName --resource-group $resourceGroupName

# Create the collection
az cosmosdb sql container create --account-name $name --database-name $databaseName --name $collectionName --partition-key-path "/my/path" --resource-group $resourceGroupName

# Get the endpoint
az cosmosdb show --name $name --resource-group $resourceGroupName --query documentEndpoint

# Get the primary key
az cosmosdb keys list --name $name --resource-group $resourceGroupName --type keys

Titik akhir dokumen dan informasi kunci primer mirip dengan teks berikut:

# endpoint
"https://mycosmosaccount.documents.azure.com:443/"
# key
"YqPXw3RP7TsJoBF5imkYR0QNA02IrreNAlkrUMkL8EW94YHs41bktBhIgWq4pqj6HCGYijQKMRkCTsSaKUO2pw=="

Penting

Simpan nilai titik akhir dan kunci, seperti yang diperlukan di Notebooks Jupyter.

Dapatkan notebook

Kode untuk contoh yang dijelaskan dalam dokumen ini tersedia di https://github.com/Azure-Samples/hdinsight-spark-scala-kafka-cosmosdb.

Unggah Notebook

Gunakan langkah-langkah berikut untuk mengunggah buku catatan dari proyek ke kluster Spark pada Microsoft Azure HDInsight Anda:

  1. Di browser web Anda, sambungkan ke Jupyter Notebook di kluster Spark Anda. Di URL berikut, ganti CLUSTERNAME dengan nama kluster Spark Anda:

    https://CLUSTERNAME.azurehdinsight.net/jupyter
    

    Ketika diminta, masukkan info masuk kluster (admin) dan kata sandi yang Anda gunakan saat membuat kluster.

  2. Dari sisi kanan atas halaman, gunakan tombol Unggah untuk mengunggah file Aliran-taxi-data-ke-kafka.ipynb ke kluster. Pilih Buka untuk memulai pengunggahan.

  3. Temukan entri Aliran-taxi-data-ke-kafka.ipynb dalam daftar Notebook, dan pilih tombol Unggah di sampingnya.

  4. Ulangi langkah 1-3 untuk memuat notebook Aliran-data-dari-Kafka-ke-Cosmos-DB.ipynb.

Muat data taxi ke Kafka

Setelah file diunggah, pilih entri Aliran-taxi-data-ke-kafka.ipynb untuk membuka buku catatan. Ikuti langkah-langkah dalam buku catatan untuk memuat data ke dalam Kafka.

Proses data taxi menggunakan Streaming Terstruktur Spark

Dari halaman beranda Jupyter Notebook, pilih entri Aliran-data-dari-Kafka-ke-Cosmos-DB.ipynb. Ikuti langkah-langkah dalam buku catatan untuk melakukan streaming data dari Kafka dan ke Azure Cosmos DB menggunakan Streaming Terstruktur Spark.

Langkah berikutnya

Sekarang setelah Anda mempelajari cara menggunakan Streaming Terstruktur Apache Spark, lihat dokumen berikut untuk mempelajari selengkapnya tentang bekerja dengan Apache Spark, Apache Kafka, dan Microsoft Azure Cosmos DB: