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
- Telepítse az Azure CLI-t.
- Nem kötelező: Azure Developer CLI az AZD-utasítások követéséhez.
Feljegyzés
Egy parancs üzembe helyezéséhez ugorjon az utolsó azd
sablonlépésre.
Beállítás
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"
Bejelentkezik az Azure-ba.
az login
Frissítse a parancssori felületet a legújabb verzióra.
az upgrade
Frissítse a Bicep-et a legújabb verzióra.
az bicep upgrade
Adja hozzá a bővítményt
containerapp
.az extension add --name containerapp --upgrade
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
Hozzon létre egy erőforráscsoportot.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
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
Apache Kafka-szolgáltatás létrehozása.
ENVIRONMENT_ID=$(az containerapp env show \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --output tsv \ --query id)
A sablon üzembe helyezése.
az containerapp add-on kafka create \ --name "$KAFKA_SVC" \ --resource-group "$RESOURCE_GROUP" \ --environment "$ENVIRONMENT"
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
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á.
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"
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
vagyserviceBinds
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 azenv
é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
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
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épjenCTRL-C
ki.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
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.
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