教學課程:使用 Azure CLI 在 HDInsight 中建立 Apache Kafka REST Proxy 啟用的叢集

在本教學課程中,您會了解如何使用 Azure CLI,在 Azure HDInsight 中建立 Apache Spark REST Proxy 啟用的叢集。 Azure HDInsight 是供企業使用的受控、全方位的開放原始碼分析服務。 Apache Kafka 是一個開放原始碼的分散式串流平台。 它通常會用來作為訊息代理程式,因為可以提供類似「發佈-訂閱」訊息佇列的功能。 Kafka REST Proxy 可讓您透過基於 HTTP 的 REST API,與您的 Kafka 叢集互動。 Azure CLI 是用來管理 Azure 資源的 Microsoft 跨平台命令列體驗。

Apache Kafka API 只能由同一個虛擬網路中的資源來存取。 您可以使用 SSH 直接存取叢集。 若要將其他服務、網路或虛擬機器連線到 Apache Kafka,您必須先建立虛擬網路,然後建立網路中的資源。 如需詳細資訊,請參閱使用虛擬網路連線到 Apache Kafka

在此教學課程中,您將會學到:

  • Kafka REST Proxy 的必要條件
  • 使用 Azure CLI 建立 Apache Kafka 叢集

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

建立 Apache Kafka 叢集

  1. 登入 Azure 訂用帳戶。

    az login
    
    # If you have multiple subscriptions, set the one to use
    # az account set --subscription "SUBSCRIPTIONID"
    
  2. 設定環境變數。 本快速入門中使用的變數是以 Bash 為基礎。 針對其他環境,會需要一點變化。

    變數 描述
    resourceGroupName 以新的資源群組名稱取代 RESOURCEGROUPNAME。
    location 以將要建立叢集的區域取代 LOCATION。 如需有效位置清單,請使用 az account list-locations 命令。
    clusterName 以新叢集的全域唯一名稱取代 CLUSTERNAME。
    storageAccount 以新的儲存體帳戶名稱取代 STORAGEACCOUNTNAME。
    httpPassword 以叢集登入的密碼 admin 取代 PASSWORD。
    sshPassword 以安全殼層使用者名稱的密碼 sshuser 取代 PASSWORD。
    securityGroupName 以 Kafka REST Proxy 的用戶端 Microsoft Entra 安全性群組名稱取代 SECURITYGROUPNAME。 變數將會傳遞至 az-hdinsight-create--kafka-client-group-name 參數。
    securityGroupID 以 Kafka REST Proxy 的用戶端 Microsoft Entra 安全性群組識別碼取代 SECURITYGROUPID。 變數將會傳遞至 az-hdinsight-create--kafka-client-group-id 參數。
    storageContainer 叢集將會使用的儲存體容器,在本教學課程中保持原狀。 此變數將會設定為叢集的名稱。
    workernodeCount 叢集中的背景工作節點數目,在本教學課程中保持原狀。 為了確保高可用性,Kafka 要求最少 3 個背景工作節點
    clusterType HDInsight 叢集的類型,在本教學課程中保持原狀。
    clusterVersion HDInsight 叢集版本,在本教學課程中保持原狀。 Kafka REST Proxy 至少需要叢集版本 4.0。
    componentVersion Kafka 版本,在本教學課程中保持原狀。 Kafka REST Proxy 至少需要元件版本 2.1。

    以所需的值更新變數。 然後輸入 CLI 命令來設定環境變數。

    export resourceGroupName=RESOURCEGROUPNAME
    export location=LOCATION
    export clusterName=CLUSTERNAME
    export storageAccount=STORAGEACCOUNTNAME
    export httpPassword='PASSWORD'
    export sshPassword='PASSWORD'
    export securityGroupName=SECURITYGROUPNAME
    export securityGroupID=SECURITYGROUPID
    
    export storageContainer=$(echo $clusterName | tr "[:upper:]" "[:lower:]")
    export workernodeCount=3
    export clusterType=kafka
    export clusterVersion=4.0
    export componentVersion=kafka=2.1
    
  3. 輸入以下命令來建立資源群組

     az group create \
        --location $location \
        --name $resourceGroupName
    
  4. 輸入以下命令來建立 Azure 儲存體帳戶

    # Note: kind BlobStorage is not available as the default storage account.
    az storage account create \
        --name $storageAccount \
        --resource-group $resourceGroupName \
        --https-only true \
        --kind StorageV2 \
        --location $location \
        --sku Standard_LRS
    
  5. 輸入以下命令,從 Azure 儲存體帳戶擷取主要金鑰並儲存至變數:

    export storageAccountKey=$(az storage account keys list \
        --account-name $storageAccount \
        --resource-group $resourceGroupName \
        --query [0].value -o tsv)
    
  6. 輸入以下命令來建立 Azure 儲存體容器

    az storage container create \
        --name $storageContainer \
        --account-key $storageAccountKey \
        --account-name $storageAccount
    
  7. 建立 HDInsight 叢集。 輸入命令之前,請記下下列參數:

    1. Kafka 叢集的必要參數:

      參數 描述
      --type 此值必須是 Kafka
      --workernode-data-disks-per-node 每個背景工作節點要使用的資料磁碟數目。 只有資料磁碟支援 HDInsight Kafka。 本教學課程使用的值為 2
    2. Kafka REST Proxy 的必要參數:

      參數 描述
      --kafka-management-node-size 節點的大小。 本教學課程使用的值為 Standard_D4_v2
      --kafka-client-group-id Kafka REST Proxy 的用戶端 Microsoft Entra 安全性群組識別碼。 此值會從 $securityGroupID 變數傳遞。
      --kafka-client-group-name Kafka REST Proxy 的用戶端 Microsoft Entra 安全性群組名稱。 此值會從 $securityGroupName 變數傳遞。
      --version HDInsight 叢集版本必須至少為 4.0。 此值會從 $clusterVersion變數傳遞。
      --component-version Kafka 版本必須至少為 2.1。 此值會從 $componentVersion變數傳遞。

      如果您想要建立不含 REST Proxy 的叢集,請從 az hdinsight create 命令刪除 --kafka-management-node-size--kafka-client-group-id--kafka-client-group-name

    3. 如果您有現有的虛擬網路,請新增參數 --vnet-name--subnet以及其值。

    輸入下列命令以建立叢集:

    az hdinsight create \
        --name $clusterName \
        --resource-group $resourceGroupName \
        --type $clusterType \
        --component-version $componentVersion \
        --http-password $httpPassword \
        --http-user admin \
        --location $location \
        --ssh-password $sshPassword \
        --ssh-user sshuser \
        --storage-account $storageAccount \
        --storage-account-key $storageAccountKey \
        --storage-container $storageContainer \
        --version $clusterVersion \
        --workernode-count $workernodeCount \
        --workernode-data-disks-per-node 2 \
        --kafka-management-node-size "Standard_D4_v2" \
        --kafka-client-group-id $securityGroupID \
        --kafka-client-group-name "$securityGroupName"
    

    可能需要數分鐘的時間,才能完成叢集建立程序。 通常大約 15 分鐘。

清除資源

完成本文之後,您可能想要刪除叢集。 利用 HDInsight,您的資料會儲存在 Azure 儲存體中,以便您在未使用叢集時安全地刪除該叢集。 您也需支付 HDInsight 叢集的費用 (即使未使用)。 由於叢集費用是儲存體費用的許多倍,所以刪除未使用的叢集符合經濟效益。

輸入所有或部分的下列命令來移除資源:

# Remove cluster
az hdinsight delete \
    --name $clusterName \
    --resource-group $resourceGroupName

# Remove storage container
az storage container delete \
    --account-name $storageAccount  \
    --name $storageContainer

# Remove storage account
az storage account delete \
    --name $storageAccount  \
    --resource-group $resourceGroupName

# Remove resource group
az group delete \
    --name $resourceGroupName

下一步

既然您已使用 Azure CLI 在 Azure HDInsight 中成功建立 Apache Kafka REST Proxy 啟用的叢集,請使用 Python 程式碼與 REST Proxy 互動: