Csatlakozás az Apache Kafkához HDInsight-on egy Azure-beli virtuális hálózaton keresztül

Megtudhatja, hogyan csatlakozhat közvetlenül az Apache Kafkához a HDInsighton keresztül egy Azure-beli virtuális hálózaton keresztül. Ez a dokumentum a Kafkához való csatlakozásról nyújt tájékoztatást a következő konfigurációk használatával:

  • Helyszíni hálózat erőforrásaiból. Ez a kapcsolat egy VPN-eszköz (szoftver vagy hardver) használatával jön létre a helyi hálózaton.
  • VPN-szoftverügyféllel rendelkező fejlesztői környezetből.

Feljegyzés

Javasoljuk, hogy az Azure Az PowerShell modult használja az Azure-ral való interakcióhoz. Az első lépésekhez tekintse meg az Azure PowerShell telepítését ismertető szakaszt. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.

Architektúra és tervezés

A HDInsight nem engedélyezi a Kafkával való közvetlen kapcsolatot a nyilvános interneten keresztül. Ehelyett a Kafka-ügyfeleknek (gyártóknak és fogyasztóknak) az alábbi csatlakozási módszerek egyikét kell használniuk:

  • Futtassa az ügyfelet ugyanabban a virtuális hálózaton, mint a Kafka a HDInsighton. Ezt a konfigurációt a HDInsight-alapú Apache Kafka indítása dokumentumban használja. Az ügyfél közvetlenül a HDInsight-fürtcsomópontokon vagy egy másik virtuális gépen fut ugyanazon a hálózaton.

  • Csatlakozás egy magánhálózatot, például a helyszíni hálózatot a virtuális hálózathoz. Ez a konfiguráció lehetővé teszi, hogy a helyszíni hálózaton lévő ügyfelek közvetlenül működjenek együtt a Kafkával. A konfiguráció engedélyezéséhez hajtsa végre a következő feladatokat:

    1. Hozzon létre egy virtuális hálózatot.

    2. Helyek közötti konfigurációt használó VPN-átjáró létrehozása. A dokumentumban használt konfiguráció a helyszíni hálózaton lévő VPN Gateway-eszközhöz csatlakozik.

    3. Hozzon létre egy DNS-kiszolgálót a virtuális hálózaton.

    4. Konfigurálja az egyes hálózatok DNS-kiszolgálója közötti továbbítást.

    5. Hozzon létre egy Kafkát a HDInsight-fürtön a virtuális hálózaton.

      További információ: Csatlakozás az Apache Kafkához egy helyszíni hálózati szakaszból.

  • Csatlakozás egyes gépeket a virtuális hálózatba VPN-átjáró és VPN-ügyfél használatával. A konfiguráció engedélyezéséhez hajtsa végre a következő feladatokat:

    1. Hozzon létre egy virtuális hálózatot.

    2. Pont–hely konfigurációt használó VPN-átjáró létrehozása. Ez a konfiguráció Windows és MacOS rendszerű ügyfelekkel is használható.

    3. Hozzon létre egy Kafkát a HDInsight-fürtön a virtuális hálózaton.

    4. Konfigurálja a Kafkát IP-hirdetésekhez. Ez a konfiguráció lehetővé teszi, hogy az ügyfél a tartománynevek helyett közvetítő IP-címekkel csatlakozzon.

    5. Töltse le és használja a VPN-ügyfelet a fejlesztési rendszeren.

      További információkért tekintse meg az Apache Kafkához való Csatlakozás egy VPN-ügyfélszakaszt.

      Figyelmeztetés

      Ezt a konfigurációt csak fejlesztési célokra javasoljuk a következő korlátozások miatt:

      • Minden ügyfélnek VPN-szoftverügyféllel kell csatlakoznia.
      • A VPN-ügyfél nem ad át névfeloldási kéréseket a virtuális hálózatnak, ezért IP-címzést kell használnia a Kafkával való kommunikációhoz. Az IP-kommunikáció további konfigurációt igényel a Kafka-fürtön.

A HDInsight virtuális hálózatokban való használatáról további információt az Azure HDInsight-fürtök virtuális hálózatának tervezése című témakörben talál.

Csatlakozás az Apache Kafkához egy helyszíni hálózatról

A helyszíni hálózattal kommunikáló Kafka-fürt létrehozásához kövesse a Csatlakozás HDInsight és a helyszíni hálózati dokumentum lépéseit.

Fontos

A HDInsight-fürt létrehozásakor válassza ki a Kafka-fürt típusát.

Ezek a lépések a következő konfigurációt hozzák létre:

  • Azure Virtual Network
  • Helyek közötti VPN-átjáró
  • Azure Storage-fiók (a HDInsight használja)
  • Kafka on HDInsight

Annak ellenőrzéséhez, hogy egy Kafka-ügyfél a helyszínen tud-e csatlakozni a fürthöz, kövesse a Példa: Python-ügyfél szakasz lépéseit.

Csatlakozás az Apache Kafkához VPN-ügyféllel

Az ebben a szakaszban ismertetett lépésekkel hozza létre a következő konfigurációt:

  • Azure Virtual Network
  • Pont–hely VPN-átjáró
  • Azure Storage-fiók (a HDInsight használja)
  • Kafka on HDInsight
  1. Kövesse a pont–hely kapcsolat dokumentum önaláírt tanúsítványokkal való használatának lépéseit . Ez a dokumentum létrehozza az átjáróhoz szükséges tanúsítványokat.

  2. Nyisson meg egy PowerShell-kérést, és használja a következő kódot az Azure-előfizetésbe való bejelentkezéshez:

    Connect-AzAccount
    # If you have multiple subscriptions, uncomment to set the subscription
    #Select-AzSubscription -SubscriptionName "name of your subscription"
    
  3. A konfigurációs adatokat tartalmazó változók létrehozásához használja az alábbi kódot:

    # 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. Az Azure-erőforráscsoport és a virtuális hálózat létrehozásához használja a következő kódot:

    # 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
    

    Figyelmeztetés

    A folyamat végrehajtása több percet is igénybe vehet.

  5. Az Azure Storage-fiók és a blobtároló létrehozásához használja a következő kódot:

    # 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. A HDInsight-fürt létrehozásához használja a következő kódot:

    # 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
    

    Figyelmeztetés

    Ez a folyamat körülbelül 15 percet vesz igénybe.

A Kafka konfigurálása IP-hirdetésekhez

Alapértelmezés szerint az Apache Zookeeper visszaadja a Kafka-közvetítők tartománynevét az ügyfeleknek. Ez a konfiguráció nem működik a VPN-szoftverügyféllel, mivel a virtuális hálózaton lévő entitások névfeloldása nem használható. Ehhez a konfigurációhoz az alábbi lépésekkel konfigurálja a Kafkát, hogy tartománynevek helyett IP-címeket hirdessen:

  1. Egy böngészőben nyissa meg a következőt: https://CLUSTERNAME.azurehdinsight.net. Cserélje le CLUSTERNAME a HDInsight-fürtön lévő Kafka nevére.

    Amikor a rendszer kéri, használja a fürt HTTPS-felhasználónevét és jelszavát. Megjelenik a fürt Ambari webes felhasználói felülete.

  2. A Kafkával kapcsolatos információk megtekintéséhez válassza ki a Kafkát a bal oldali listából.

    Service list with Kafka highlighted.

  3. A Kafka konfigurációjának megtekintéséhez válassza a Konfigurációk lehetőséget a felső középen.

    Apache Ambari services configuration.

  4. A kafka-env konfiguráció megkereséséhez írja be kafka-env a jobb felső sarokban lévő Szűrő mezőt.

    Kafka configuration, for kafka-env.

  5. Ha úgy szeretné konfigurálni a Kafkát, hogy IP-címeket hirdessen, adja hozzá a következő szöveget a kafka-env-template mező aljára:

    # 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. A Kafka által figyelt felület konfigurálásához írja be listeners a jobb felső sarokban lévő Szűrő mezőt.

  7. Ha a Kafka-t úgy szeretné konfigurálni, hogy az összes hálózati adapteren figyeljen, módosítsa a figyelőmező értékét a következőrePLAINTEXT://0.0.0.0:9092: .

  8. A konfiguráció módosításainak mentéséhez használja a Mentés gombot. Írjon be egy szöveges üzenetet, amely leírja a módosításokat. A módosítások mentése után kattintson az OK gombra .

    Apache Ambari save configuration.

  9. A Kafka újraindításával kapcsolatos hibák megelőzéséhez használja a Service Actions gombot, és válassza a Karbantartási mód bekapcsolása lehetőséget. A művelet végrehajtásához kattintson az OK gombra.

    Service actions, with turn on maintenance highlighted.

  10. A Kafka újraindításához használja az Újraindítás gombot, és válassza az Összes érintett újraindítása lehetőséget. Erősítse meg az újraindítást, majd a művelet befejezése után használja az OK gombot.

    Restart button with restart all affected highlighted.

  11. A karbantartási mód letiltásához használja a Service Actions gombot, és válassza a Karbantartási mód kikapcsolása lehetőséget. A művelet végrehajtásához kattintson az OK gombra .

Csatlakozás a VPN-átjáróhoz

A VPN-átjáróhoz való csatlakozáshoz használja a pont–hely kapcsolati dokumentum konfigurálásának Azure-ba mutató Csatlakozás szakaszát.

Példa: Python-ügyfél

A Kafkával való kapcsolat ellenőrzéséhez használja az alábbi lépéseket egy Python-gyártó és -fogyasztó létrehozásához és futtatásához:

  1. Az alábbi módszerek egyikével kérje le a Kafka-fürt csomópontjainak teljes tartománynevét (FQDN) és IP-címét:

    $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}"
    

    Ez a szkript feltételezi, hogy $resourceGroupName a virtuális hálózatot tartalmazó Azure-erőforráscsoport neve.

    Mentse a visszaadott adatokat a következő lépésekben való használatra.

  2. A kafka-python-ügyfél telepítéséhez használja az alábbiakat :

    pip install kafka-python
    
  3. Ha adatokat szeretne küldeni a Kafkának, használja a következő Python-kódot:

    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')
    

    Cserélje le a 'kafka_broker' bejegyzéseket az ebben a szakaszban szereplő 1. lépésben visszaadott címekre:

    • Ha szoftveres VPN-ügyfelet használ, cserélje le a kafka_broker bejegyzéseket a feldolgozó csomópontok IP-címére.

    • Ha egyéni DNS-kiszolgálón keresztül engedélyezte a névfeloldásokat, cserélje le a kafka_broker bejegyzéseket a feldolgozó csomópontok teljes tartománynevére.

      Feljegyzés

      Ez a kód elküldi a sztringet test message a témakörnek testtopic. A HDInsighton futó Kafka alapértelmezett konfigurációja nem a témakör létrehozása, ha nem létezik. Tekintse meg az Apache Kafka HDInsighton való konfigurálását témakörök automatikus létrehozásához. Másik lehetőségként manuálisan is létrehozhat témaköröket az üzenetek létrehozása előtt.

  4. Az üzenetek Kafkából való lekéréséhez használja a következő Python-kódot:

    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)
    

    Cserélje le a 'kafka_broker' bejegyzéseket az ebben a szakaszban szereplő 1. lépésben visszaadott címekre:

    • Ha szoftveres VPN-ügyfelet használ, cserélje le a kafka_broker bejegyzéseket a feldolgozó csomópontok IP-címére.

    • Ha egyéni DNS-kiszolgálón keresztül engedélyezte a névfeloldásokat, cserélje le a kafka_broker bejegyzéseket a feldolgozó csomópontok teljes tartománynevére.

Következő lépések

A HDInsight virtuális hálózattal való használatáról további információt az Azure HDInsight-fürtök virtuális hálózati üzembe helyezésének megtervezése című dokumentumban talál.

Az Azure-beli virtuális hálózat pont–hely VPN-átjáróval történő létrehozásáról az alábbi dokumentumokban talál további információt:

Az Apache Kafka HDInsighton való használatával kapcsolatos további információkért tekintse meg a következő dokumentumokat: