Bagikan melalui


Terhubung ke Apache Kafka pada HDInsight melalui Azure Virtual Network

Pelajari cara untuk langsung terhubung ke Apache Kafka pada HDInsight melalui Azure Virtual Network. Dokumen ini menyediakan informasi tentang penghubungan ke Kafka menggunakan konfigurasi berikut:

  • Dari sumber daya dalam jaringan lokal. Koneksi ini didirikan dengan menggunakan perangkat VPN (perangkat lunak atau perangkat keras) pada jaringan lokal Anda.
  • Dari lingkungan pengembangan menggunakan klien perangkat lunak VPN.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Untuk memulai, lihat Menginstal Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Arsitektur dan perencanaan

HDInsight tidak mengizinkan koneksi langsung ke Kafka melalui internet publik. Sebagai gantinya, klien Kafka (produsen dan konsumen) harus menggunakan salah satu metode koneksi berikut:

  • Menjalankan klien dalam jaringan virtual yang sama dengan Kafka pada HDInsight. Konfigurasi ini digunakan dalam dokumen Memulai dengan Apache Kafka pada HDInsight. Klien berjalan langsung pada simpul kluster HDInsight atau pada komputer virtual lain di jaringan yang sama.

  • Hubungkan jaringan privat, seperti jaringan lokal Anda, ke jaringan virtual. Konfigurasi ini memungkinkan klien di jaringan lokal Anda untuk langsung menggunakan Kafka. Untuk mengaktifkan konfigurasi ini, lakukan tugas berikut:

    1. Buat jaringan virtual.

    2. Membuat gateway VPN yang menggunakan konfigurasi situs ke situs. Konfigurasi yang digunakan dalam dokumen ini terhubung ke perangkat gateway VPN di jaringan lokal Anda.

    3. Membuat server DNS di jaringan virtual.

    4. Mengonfigurasi penerusan antara server DNS di setiap jaringan.

    5. Membuat Kafka pada kluster HDInsight di jaringan virtual.

      Untuk informasi selengkapnya, lihat bagian Terhubung ke Apache Kafka dari jaringan lokal.

  • Hubungkan mesin individu ke jaringan virtual menggunakan gateway VPN dan klien VPN. Untuk mengaktifkan konfigurasi ini, lakukan tugas berikut:

    1. Buat jaringan virtual.

    2. Membuat gateway VPN yang menggunakan konfigurasi titik ke situs. Konfigurasi ini dapat digunakan dengan klien Windows dan MacOS.

    3. Membuat Kafka pada kluster HDInsight di jaringan virtual.

    4. Mengonfigurasi Kafka untuk iklan IP. Konfigurasi ini memungkinkan klien untuk terhubung menggunakan alamat IP perantara dan bukan nama domain.

    5. Mengunduh dan menggunakan klien VPN pada sistem pengembangan.

      Untuk informasi selengkapnya, lihat bagian Terhubung ke Apache Kafka dengan klien VPN.

      Peringatan

      Konfigurasi ini hanya direkomendasikan untuk tujuan pengembangan karena keterbatasan berikut:

      • Setiap klien harus terhubung menggunakan klien perangkat lunak VPN.
      • Klien VPN tidak meneruskan permintaan resolusi nama ke jaringan virtual, jadi Anda harus menggunakan alamat IP untuk berkomunikasi dengan Kafka. Komunikasi IP memerlukan konfigurasi tambahan pada kluster Kafka.

Untuk informasi selengkapnya tentang penggunaan HDInsight di jaringan virtual, lihat dokumen Merencanakan jaringan virtual untuk kluster Azure HDInsight.

Menyambungkan ke Apache Kafka dari jaringan lokal

Untuk membuat kluster Kafka yang berkomunikasi dengan jaringan lokal Anda, ikuti langkah-langkah dalam dokumen Menghubungkan HDInsight ke jaringan lokal Anda.

Penting

Saat membuat kluster HDInsight, pilih jenis kluster Kafka.

Langkah-langkah ini membuat konfigurasi berikut:

  • Microsoft Azure Virtual Network
  • Gateway VPN situs ke situs
  • Akun Azure Storage (digunakan oleh HDInsight)
  • Kafka pada HDInsight

Untuk memverifikasi klien Kafka dapat terhubung ke kluster dari lokal, gunakan langkah-langkah di bagian Contoh: klien Python.

Menyambungkan ke Apache Kafka dengan klien VPN

Gunakan langkah-langkah di bagian ini untuk membuat konfigurasi berikut:

  • Microsoft Azure Virtual Network
  • Gateway VPN titik ke situs
  • Akun Azure Storage (digunakan oleh HDInsight)
  • Kafka pada HDInsight
  1. Ikuti langkah-langkah dalam dokumen Menggunakan sertifikat yang ditandatangani sendiri untuk koneksi Titik ke situs. Dokumen ini membuat sertifikat yang diperlukan untuk gateway.

  2. Buka perintah PowerShell dan gunakan kode berikut ini untuk masuk ke langganan Azure Anda:

    Connect-AzAccount
    # If you have multiple subscriptions, uncomment to set the subscription
    #Select-AzSubscription -SubscriptionName "name of your subscription"
    
  3. Gunakan kode berikut untuk membuat variabel yang berisi informasi konfigurasi:

    # Prompt for generic information
    $resourceGroupName = Read-Host "What is the resource group name?"
    $baseName = Read-Host "What is the base name? It is used to create names for resources, such as 'net-basename' and 'kafka-basename':"
    $location = Read-Host "What Azure Region do you want to create the resources in?"
    $rootCert = Read-Host "What is the file path to the root certificate? It is used to secure the VPN gateway."
    
    # Prompt for HDInsight credentials
    $adminCreds = Get-Credential -Message "Enter the HTTPS user name and password for the HDInsight cluster" -UserName "admin"
    $sshCreds = Get-Credential -Message "Enter the SSH user name and password for the HDInsight cluster" -UserName "sshuser"
    
    # Names for Azure resources
    $networkName = "net-$baseName"
    $clusterName = "kafka-$baseName"
    $storageName = "store$baseName" # Can't use dashes in storage names
    $defaultContainerName = $clusterName
    $defaultSubnetName = "default"
    $gatewaySubnetName = "GatewaySubnet"
    $gatewayPublicIpName = "GatewayIp"
    $gatewayIpConfigName = "GatewayConfig"
    $vpnRootCertName = "rootcert"
    $vpnName = "VPNGateway"
    
    # Network settings
    $networkAddressPrefix = "10.0.0.0/16"
    $defaultSubnetPrefix = "10.0.0.0/24"
    $gatewaySubnetPrefix = "10.0.1.0/24"
    $vpnClientAddressPool = "172.16.201.0/24"
    
    # HDInsight settings
    $hdiWorkerNodes = 4
    $hdiVersion = "3.6"
    $hdiType = "Kafka"
    
  4. Gunakan kode berikut untuk membuat grup sumber daya Azure dan jaringan virtual:

    # Create the resource group that contains everything
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    
    # Create the subnet configuration
    $defaultSubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $defaultSubnetName `
        -AddressPrefix $defaultSubnetPrefix
    $gatewaySubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $gatewaySubnetName `
        -AddressPrefix $gatewaySubnetPrefix
    
    # Create the subnet
    New-AzVirtualNetwork -Name $networkName `
        -ResourceGroupName $resourceGroupName `
        -Location $location `
        -AddressPrefix $networkAddressPrefix `
        -Subnet $defaultSubnetConfig, $gatewaySubnetConfig
    
    # Get the network & subnet that were created
    $network = Get-AzVirtualNetwork -Name $networkName `
        -ResourceGroupName $resourceGroupName
    $gatewaySubnet = Get-AzVirtualNetworkSubnetConfig -Name $gatewaySubnetName `
        -VirtualNetwork $network
    $defaultSubnet = Get-AzVirtualNetworkSubnetConfig -Name $defaultSubnetName `
        -VirtualNetwork $network
    
    # Set a dynamic public IP address for the gateway subnet
    $gatewayPublicIp = New-AzPublicIpAddress -Name $gatewayPublicIpName `
        -ResourceGroupName $resourceGroupName `
        -Location $location `
        -AllocationMethod Dynamic
    $gatewayIpConfig = New-AzVirtualNetworkGatewayIpConfig -Name $gatewayIpConfigName `
        -Subnet $gatewaySubnet `
        -PublicIpAddress $gatewayPublicIp
    
    # Get the certificate info
    # Get the full path in case a relative path was passed
    $rootCertFile = Get-ChildItem $rootCert
    $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($rootCertFile)
    $certBase64 = [System.Convert]::ToBase64String($cert.RawData)
    $p2sRootCert = New-AzVpnClientRootCertificate -Name $vpnRootCertName `
        -PublicCertData $certBase64
    
    # Create the VPN gateway
    New-AzVirtualNetworkGateway -Name $vpnName `
        -ResourceGroupName $resourceGroupName `
        -Location $location `
        -IpConfigurations $gatewayIpConfig `
        -GatewayType Vpn `
        -VpnType RouteBased `
        -EnableBgp $false `
        -GatewaySku Standard `
        -VpnClientAddressPool $vpnClientAddressPool `
        -VpnClientRootCertificates $p2sRootCert
    

    Peringatan

    Dibutuhkan waktu beberapa menit agar proses ini selesai.

  5. Gunakan kode berikut untuk membuat Akun Azure Storage dan kontainer blob:

    # Create the storage account
    New-AzStorageAccount `
        -ResourceGroupName $resourceGroupName `
        -Name $storageName `
        -SkuName Standard_GRS `
        -Location $location `
        -Kind StorageV2 `
        -EnableHttpsTrafficOnly 1
    
    # Get the storage account keys and create a context
    $defaultStorageKey = (Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName `
        -Name $storageName)[0].Value
    $storageContext = New-AzStorageContext -StorageAccountName $storageName `
        -StorageAccountKey $defaultStorageKey
    
    # Create the default storage container
    New-AzStorageContainer -Name $defaultContainerName `
        -Context $storageContext
    
  6. Gunakan kode berikut untuk membuat kluster HDInsight:

    # Create the HDInsight cluster
    New-AzHDInsightCluster `
        -ResourceGroupName $resourceGroupName `
        -ClusterName $clusterName `
        -Location $location `
        -ClusterSizeInNodes $hdiWorkerNodes `
        -ClusterType $hdiType `
        -OSType Linux `
        -Version $hdiVersion `
        -HttpCredential $adminCreds `
        -SshCredential $sshCreds `
        -DefaultStorageAccountName "$storageName.blob.core.windows.net" `
        -DefaultStorageAccountKey $defaultStorageKey `
        -DefaultStorageContainer $defaultContainerName `
        -DisksPerWorkerNode 2 `
        -VirtualNetworkId $network.Id `
        -SubnetName $defaultSubnet.Id
    

    Peringatan

    Prosedur ini membutuhkan waktu sekitar 15 menit untuk selesai.

Mengonfigurasi Kafka untuk iklan IP

Secara default, Apache Zookeeper menampilkan nama domain broker Kafka kepada klien. Konfigurasi ini tidak berfungsi dengan klien perangkat lunak VPN, karena tidak dapat menggunakan resolusi nama untuk entitas di jaringan virtual. Gunakan langkah-langkah berikut untuk mengonfigurasi Kafka untuk mengiklankan alamat IP dan bukan nama domain:

  1. Menggunakan browser web, buka https://CLUSTERNAME.azurehdinsight.net. Ganti CLUSTERNAME dengan nama Kafka pada kluster HDInsight.

    Ketika diminta, gunakan nama pengguna dan sandi HTTPS untuk kluster. Ambari Web UI untuk kluster ditampilkan.

  2. Untuk melihat informasi tentang Kafka, pilih Kafka dari daftar di sebelah kiri.

    Daftar layanan dengan Kafka disorot.

  3. Untuk melihat konfigurasi Kafka, pilih Konfigurasi dari tengah atas.

    Konfigurasi layanan Apache Ambari.

  4. Untuk menemukan konfigurasi kafka-env, masukkan kafka-env di bidang Filter di kanan atas.

    Konfigurasi Kafka, untuk kafka-env.

  5. Untuk mengonfigurasi Kafka guna mengiklankan alamat IP, tambahkan teks berikut ke bagian bawah bidang templat kafka-env:

    # Configure Kafka to advertise IP addresses instead of FQDN
    IP_ADDRESS=$(hostname -i)
    echo advertised.listeners=$IP_ADDRESS
    sed -i.bak -e '/advertised/{/advertised@/!d;}' /usr/hdp/current/kafka-broker/conf/server.properties
    echo "advertised.listeners=PLAINTEXT://$IP_ADDRESS:9092" >> /usr/hdp/current/kafka-broker/conf/server.properties
    
  6. Untuk mengonfigurasi antarmuka yang dipatuhi Kafka, masukkan listeners di bidang Filter pada kanan atas.

  7. Untuk mengonfigurasi Kafka untuk mematuhi semua antarmuka jaringan, ubah nilai di bidang listener menjadi PLAINTEXT://0.0.0.0:9092.

  8. Untuk menyimpan perubahan konfigurasi, gunakan tombol ​Simpan. Masukkan pesan teks yang menjelaskan perubahan. Pilih OK setelah perubahan disimpan.

    Konfigurasi penyimpanan Apache Ambari.

  9. Untuk mencegah kesalahan saat menghidupkan ulang Kafka, gunakan tombol Tindakan Layanan dan pilih Aktifkan Mode Pemeliharaan. Pilih OK untuk menyelesaikan operasi ini.

    Tindakan layanan, dengan mengaktifkan pemeliharaan disorot.

  10. Untuk menghidupkan ulang Kafka, gunakan tombol Hidupkan Ulang dan pilih Hidupkan ulang Semua yang Terpengaruh. Konfirmasikan hidupkan ulang, lalu gunakan tombol OK setelah operasi selesai.

    Tombol Mulai ulang dengan mulai ulang semua yang terpengaruh disorot.

  11. Untuk menonaktifkan mode pemeliharaan, gunakan tombol Tindakan Layanan dan pilih Mematikan Mode Pemeliharaan. Pilih OK untuk menyelesaikan operasi ini.

Terhubung ke gateway VPN

Untuk terhubung ke gateway VPN, gunakan bagian Terhubung ke Azure dari dokumen Mengonfigurasi koneksi Titik ke Situs.

Contoh: Klien Python

Untuk memvalidasi konektivitas ke Kafka, gunakan langkah-langkah berikut untuk membuat dan menjalankan produsen dan konsumen Python:

  1. Gunakan salah satu metode berikut untuk mengambil nama domain yang sepenuhnya memenuhi syarat (FQDN) dan alamat IP simpul di kluster Kafka:

    $resourceGroupName = "The resource group that contains the virtual network used with HDInsight"
    
    $clusterNICs = Get-AzNetworkInterface -ResourceGroupName $resourceGroupName | where-object {$_.Name -like "*node*"}
    
    $nodes = @()
    foreach($nic in $clusterNICs) {
        $node = new-object System.Object
        $node | add-member -MemberType NoteProperty -name "Type" -value $nic.Name.Split('-')[1]
        $node | add-member -MemberType NoteProperty -name "InternalIP" -value $nic.IpConfigurations.PrivateIpAddress
        $node | add-member -MemberType NoteProperty -name "InternalFQDN" -value $nic.DnsSettings.InternalFqdn
        $nodes += $node
    }
    $nodes | sort-object Type
    
    az network nic list --resource-group <resourcegroupname> --output table --query "[?contains(name,'node')].{NICname:name,InternalIP:ipConfigurations[0].privateIpAddress,InternalFQDN:dnsSettings.internalFqdn}"
    

    Skrip ini mengasumsikan bahwa $resourceGroupName adalah nama grup sumber daya Azure yang berisi jaringan virtual.

    Simpan informasi yang ditampilkan untuk digunakan di langkah berikutnya.

  2. Gunakan berikut ini untuk menginstal klien kafka-python:

    pip install kafka-python
    
  3. Untuk mengirim data ke Kafka, gunakan kode Python berikut:

    from kafka import KafkaProducer
    # Replace the `ip_address` entries with the IP address of your worker nodes
    # NOTE: you don't need the full list of worker nodes, just one or two.
    producer = KafkaProducer(bootstrap_servers=['kafka_broker_1','kafka_broker_2'])
    for _ in range(50):
       producer.send('testtopic', b'test message')
    

    Ganti entri 'kafka_broker' dengan alamat yang ditampilkan dari langkah 1 di bagian ini:

    • Jika Anda menggunakan klien VPN perangkat lunak, ganti entri kafka_broker dengan alamat IP simpul pekerja Anda.

    • Jika Anda telah mengaktifkan resolusi nama melalui server DNS kustom, ganti entri kafka_broker dengan FQDN simpul pekerja.

      Catatan

      Kode ini mengirimkan string test message ke topik testtopic. Konfigurasi default Kafka di HDInsight adalah tidak membuat topik jika tidak ada. Lihat Cara mengonfigurasi Apache Kafka di HDInsight untuk membuat topik secara otomatis. Atau, Anda dapat membuat topik secara manual sebelum membuat pesan.

  4. Untuk mengambil pesan dari Kafka, gunakan kode Python berikut:

    from kafka import KafkaConsumer
    # Replace the `ip_address` entries with the IP address of your worker nodes
    # Again, you only need one or two, not the full list.
    # Note: auto_offset_reset='earliest' resets the starting offset to the beginning
    #       of the topic
    consumer = KafkaConsumer(bootstrap_servers=['kafka_broker_1','kafka_broker_2'],auto_offset_reset='earliest')
    consumer.subscribe(['testtopic'])
    for msg in consumer:
      print (msg)
    

    Ganti entri 'kafka_broker' dengan alamat yang ditampilkan dari langkah 1 di bagian ini:

    • Jika Anda menggunakan klien VPN perangkat lunak, ganti entri kafka_broker dengan alamat IP simpul pekerja Anda.

    • Jika Anda telah mengaktifkan resolusi nama melalui server DNS kustom, ganti entri kafka_broker dengan FQDN simpul pekerja.

Langkah berikutnya

Untuk informasi selengkapnya tentang penggunaan HDInsight dengan jaringan virtual, lihat dokumen Merencanakan penyebaran jaringan virtual untuk kluster Azure HDInsight.

Untuk informasi selengkapnya tentang pembuatan Azure Virtual Network dengan gateway VPN Titik ke Situs, lihat dokumen berikut ini:

Untuk informasi selengkapnya tentang penggunaan Apache Kafka pada HDInsight, lihat dokumen berikut ini: