Megosztás a következőn keresztül:


Oktatóanyag: Apache Kafka-szolgáltatás létrehozása és használata fejlesztéshez

Az Azure Container Apps lehetővé teszi a fejlesztési és éles szintű szolgáltatásokhoz való csatlakozást, hogy számos különféle funkciót biztosítson az alkalmazások számára.

Ebben az oktatóanyagban megismerheti egy fejlesztési Apache Kafka-szolgáltatás létrehozását és használatát.

Ebben az oktatóanyagban az Azure CLI-parancsok és a Bicep-sablontöredékek szerepelnek. A Bicep használata esetén az összes töredék hozzáadható egyetlen Bicep-fájlhoz, és egyszerre üzembe helyezheti a sablont.

  • Container Apps-környezet létrehozása a szolgáltatás és a tárolóalkalmazás üzembe helyezéséhez
  • Apache Kafka-szolgáltatás létrehozása
  • Parancssori alkalmazás beállítása a dev Apache Kafka szolgáltatás használatára
  • Kafka-ui-alkalmazás üzembe helyezése az alkalmazásadatok megtekintéséhez
  • Végleges bicep-sablon fordítása az összes erőforrás konzisztens és kiszámítható sablontelepítéssel történő üzembe helyezéséhez
  • azd Sablon használata az összes erőforrás egyetlen parancs üzembe helyezéséhez

Előfeltételek

Feljegyzés

Egy parancs üzembe helyezéséhez ugorjon az utolsó azd sablonlépésre.

Beállítás

  1. Definiáljon változókat a közös értékekhez.

    RESOURCE_GROUP="kafka-dev"
    LOCATION="northcentralus"
    ENVIRONMENT="aca-env"
    KAFKA_SVC="kafka01"
    KAFKA_CLI_APP="kafka-cli-app"
    KAFKA_UI_APP="kafka-ui-app"
    
  2. Bejelentkezik az Azure-ba.

    az login
    
  3. Frissítse a parancssori felületet a legújabb verzióra.

    az upgrade
    
  4. Frissítse a Bicep-et a legújabb verzióra.

    az bicep upgrade
    
  5. Adja hozzá a bővítményt containerapp .

    az extension add --name containerapp --upgrade
    
  6. Regisztrálja a szükséges névtereket.

    az provider register --namespace Microsoft.App
    
    az provider register --namespace Microsoft.OperationalInsights
    

Container Apps-környezet létrehozása

  1. Hozzon létre egy erőforráscsoportot.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Hozzon létre egy Container Apps-környezetet.

    az containerapp env create \
      --name "$ENVIRONMENT" \
      --resource-group "$RESOURCE_GROUP" \
      --location "$LOCATION"
    

Apache Kafka-szolgáltatás létrehozása

  1. Apache Kafka-szolgáltatás létrehozása.

    ENVIRONMENT_ID=$(az containerapp env show \
      --name "$ENVIRONMENT" \
      --resource-group "$RESOURCE_GROUP" \
      --output tsv \
      --query id)
    
  2. A sablon üzembe helyezése.

        az containerapp add-on kafka create \
        --name "$KAFKA_SVC" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT"
    
  3. Naplókimenet megtekintése a Kafka-példányból

    A parancs használatával megtekintheti a logs naplóüzeneteket.

    az containerapp logs show \
        --name $KAFKA_SVC \
        --resource-group $RESOURCE_GROUP \
        --follow --tail 30
    

    Képernyőkép a tárolóalkalmazás kafka szolgáltatásnaplóiról.

Alkalmazás létrehozása a szolgáltatás teszteléséhez

Az alkalmazás létrehozásakor beállíthatja, hogy a Kafka-példányt használja./kafka-topics.sh./kafka-console-producer.sh, és kafka-console-consumer.sh csatlakozzon hozzá.

  1. Hozzon létre egy kafka-cli-app alkalmazást, amely a Kafka szolgáltatáshoz kapcsolódik.

    az containerapp create \
        --name "$KAFKA_CLI_APP" \
        --image mcr.microsoft.com/k8se/services/kafka:3.4 \
        --bind "$KAFKA_SVC" \
        --environment "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --min-replicas 1 \
        --max-replicas 1 \
        --command "/bin/sleep" "infinity"
    
  2. Futtassa a CLI-parancsot exec a tesztalkalmazáshoz való csatlakozáshoz.

    az containerapp exec \
        --name $KAFKA_CLI_APP \
        --resource-group $RESOURCE_GROUP \
        --command /bin/bash
    

    Amikor a tesztalkalmazást használja --bind vagy serviceBinds használja, a rendszer beszúrja a kapcsolati adatokat az alkalmazáskörnyezetbe. Miután csatlakozott a teszttárolóhoz, a parancs használatával megvizsgálhatja az env értékeket.

    env | grep "^KAFKA_"
    
    KAFKA_SECURITYPROTOCOL=SASL_PLAINTEXT
    KAFKA_BOOTSTRAPSERVER=kafka01:9092
    KAFKA_HOME=/opt/kafka
    KAFKA_PROPERTIES_SASL_JAAS_CONFIG=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user" password="7dw..." user_kafka-user="7dw..." ;
    KAFKA_BOOTSTRAP_SERVERS=kafka01:9092
    KAFKA_SASLUSERNAME=kafka-user
    KAFKA_SASL_USER=kafka-user
    KAFKA_VERSION=3.4.0
    KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
    KAFKA_SASL_PASSWORD=7dw...
    KAFKA_SASLPASSWORD=7dw...
    KAFKA_SASL_MECHANISM=PLAIN
    KAFKA_SASLMECHANISM=PLAIN
    
  3. Eseménytémakör létrehozásához használható kafka-topics.sh .

    Hozzon létre egy kafka.props fájlt.

    echo "security.protocol=$KAFKA_SECURITY_PROTOCOL" >> kafka.props && \
    echo "sasl.mechanism=$KAFKA_SASL_MECHANISM" >> kafka.props && \
    echo "sasl.jaas.config=$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" >> kafka.props
    

    quickstart-events Eseménytémakör létrehozása.

    /opt/kafka/bin/kafka-topics.sh \
        --create --topic quickstart-events \
        --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
        --command-config kafka.props
    # Created topic quickstart-events.
    
    /opt/kafka/bin/kafka-topics.sh \
        --describe --topic quickstart-events \
        --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
        --command-config kafka.props
    # Topic: quickstart-events	TopicId: lCkTKmvZSgSUCHozhhvz1Q	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
    # Topic: quickstart-events	Partition: 0	Leader: 1	Replicas: 1	Isr: 1
    
  4. Eseményeket kafka-console-producer.sh írhat a témakörbe.

    /opt/kafka/bin/kafka-console-producer.sh \
        --topic quickstart-events \
        --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
        --producer.config kafka.props
    
    > this is my first event
    > this is my second event
    > this is my third event
    > CTRL-C
    

    Feljegyzés

    A ./kafka-console-producer.sh parancssor arra kéri, hogy írjon eseményeket a következővel >: . Írjon néhány eseményt az ábrán látható módon, majd lépjen CTRL-C ki.

  5. A témakör eseményeinek olvasására használható kafka-console-consumer.sh .

    /opt/kafka/bin/kafka-console-consumer.sh \
         --topic quickstart-events \
        --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
        --from-beginning \
        --consumer.config kafka.props
    
    # this is my first event
    # this is my second event
    # this is my third event
    

Képernyőkép a tárolóalkalmazás kafka CLI kimeneti naplóiról.

Fejlesztői szolgáltatás használata meglévő alkalmazással

Ha már rendelkezik Apache Kafkát használó alkalmazással, módosíthatja a kapcsolati adatok betöltésének módját.

Először hozza létre a következő környezeti változókat.

KAFKA_HOME=/opt/kafka
KAFKA_PROPERTIES_SASL_JAAS_CONFIG=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user" password="7dw..." user_kafka-user="7dw..." ;
KAFKA_BOOTSTRAP_SERVERS=kafka01:9092
KAFKA_SASL_USER=kafka-user
KAFKA_VERSION=3.4.0
KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
KAFKA_SASL_PASSWORD=7dw...
KAFKA_SASL_MECHANISM=PLAIN

A parancssori felület (vagy a Bicep) használatával frissítheti az alkalmazást, hogy hozzáadja --bind $KAFKA_SVC a dev szolgáltatás használatához.

Kötés a fejlesztői szolgáltatáshoz

A Kafka-ui üzembe helyezése a Kafka-példány megtekintéséhez és kezeléséhez.

Lásd: Bicep vagy azd példa.

Képernyőkép a Kafka szolgáltatáshoz csatlakozó pgweb Container Appról.

Az összes erőforrás üzembe helyezése

Ha az összes erőforrást egyszerre szeretné üzembe helyezni, használja az alábbi példákat.

Bicep

Az alábbi Bicep-sablon az oktatóanyag összes erőforrását tartalmazza.

Ezzel a tartalommal hozhat létre kafka-dev.bicep fájlt.

targetScope = 'resourceGroup'
param location string = resourceGroup().location
param appEnvironmentName string = 'aca-env'
param kafkaSvcName string = 'kafka01'
param kafkaCliAppName string = 'kafka-cli-app'
param kafkaUiAppName string = 'kafka-ui'

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
  name: '${appEnvironmentName}-log-analytics'
  location: location
  properties: {
    sku: {
      name: 'PerGB2018'
    }
  }
}

resource appEnvironment 'Microsoft.App/managedEnvironments@2023-04-01-preview' = {
  name: appEnvironmentName
  location: location
  properties: {
    appLogsConfiguration: {
      destination: 'log-analytics'
      logAnalyticsConfiguration: {
        customerId: logAnalytics.properties.customerId
        sharedKey: logAnalytics.listKeys().primarySharedKey
      }
    }
  }
}

resource kafka 'Microsoft.App/containerApps@2023-04-01-preview' = {
  name: kafkaSvcName
  location: location
  properties: {
    environmentId: appEnvironment.id
    configuration: {
      service: {
          type: 'kafka'
      }
    }
  }
}

resource kafkaCli 'Microsoft.App/containerApps@2023-04-01-preview' = {
  name: kafkaCliAppName
  location: location
  properties: {
    environmentId: appEnvironment.id
    template: {
      serviceBinds: [
        {
          serviceId: kafka.id
        }
      ]
      containers: [
        {
          name: 'kafka-cli'
          image: 'mcr.microsoft.com/k8se/services/kafka:3.4'
          command: [ '/bin/sleep', 'infinity' ]
        }
      ]
      scale: {
        minReplicas: 1
        maxReplicas: 1
      }
    }
  }
}

resource kafkaUi 'Microsoft.App/containerApps@2023-04-01-preview' = {
  name: kafkaUiAppName
  location: location
  properties: {
    environmentId: appEnvironment.id
    configuration: {
      ingress: {
        external: true
        targetPort: 8080
      }
    }
    template: {
      serviceBinds: [
        {
          serviceId: kafka.id
          name: 'kafka'
        }
      ]
      containers: [
        {
          name: 'kafka-ui'
          image: 'docker.io/provectuslabs/kafka-ui:latest'
          command: [
            '/bin/sh'
          ]
          args: [
            '-c'
            '''export KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS="$KAFKA_BOOTSTRAP_SERVERS" && \
            export KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG="$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" && \
            export KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM="$KAFKA_SASL_MECHANISM" && \
            export KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL="$KAFKA_SECURITY_PROTOCOL" && \
            java $JAVA_OPTS -jar kafka-ui-api.jar'''
          ]
          resources: {
            cpu: json('1.0')
            memory: '2.0Gi'
          }
        }
      ]
    }
  }
}

output kafkaUiUrl string = 'https://${kafkaUi.properties.configuration.ingress.fqdn}'

output kafkaCliExec string = 'az containerapp exec -n ${kafkaCli.name} -g ${resourceGroup().name} --command /bin/bash'

output kafkaLogs string = 'az containerapp logs show -n ${kafka.name} -g ${resourceGroup().name} --follow --tail 30'

A sablon üzembe helyezéséhez használja az Azure CLI-t.

RESOURCE_GROUP="kafka-dev"
LOCATION="northcentralus"

az group create \
    --name "$RESOURCE_GROUP" \
    --location "$LOCATION"

az deployment group create -g $RESOURCE_GROUP \
    --query 'properties.outputs.*.value' \
    --template-file kafka-dev.bicep

Azure Developer CLI

Egy végleges sablon érhető el a GitHubon.

A sablon üzembe helyezésére használható azd up .

git clone https://github.com/Azure-Samples/aca-dev-service-kafka-azd
cd aca-dev-service-kafka-azd
azd up

Az erőforrások eltávolítása

Ha végzett, futtassa a következő parancsot a Container Apps-erőforrásokat tartalmazó erőforráscsoport törléséhez.

Figyelemfelhívás

Az alábbi parancs törli a megadott erőforráscsoportot és a benne lévő összes erőforrást. Ha az oktatóanyag hatókörén kívül eső erőforrások a megadott erőforráscsoportban találhatók, akkor azok is törlődnek.

az group delete \
    --resource-group $RESOURCE_GROUP