Skicka och ta emot meddelanden mellan Azure IoT MQ Preview och Azure Event Hubs eller Kafka

Viktigt!

Förhandsversion av Azure IoT Operations – aktiverad av Azure Arc finns för närvarande i FÖRHANDSVERSION. Du bör inte använda den här förhandsgranskningsprogramvaran i produktionsmiljöer.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Kafka-anslutningsappen skickar meddelanden från Azure IoT MQ Preview MQTT Broker till en Kafka-slutpunkt och hämtar meddelanden på samma sätt åt andra hållet. Eftersom Azure Event Hubs har stöd för Kafka API fungerar anslutningsappen direkt med Event Hubs.Since Azure Event Hubs supports Kafka API, the connector works out-of-the-box with Event Hubs.

Konfigurera Event Hubs-anslutning via Kafka-slutpunkt

Anslutningsappen är som standard inte installerad med Azure IoT MQ. Det måste uttryckligen aktiveras med ämnesmappning och autentiseringsuppgifter angivna. Följ dessa steg för att aktivera dubbelriktad kommunikation mellan IoT MQ och Azure Event Hubs via dess Kafka-slutpunkt.

  1. Skapa ett Event Hubs-namnområde.

  2. Skapa en händelsehubb för varje Kafka-ämne.

Bevilja anslutningsappen åtkomst till Event Hubs-namnområdet

Att ge IoT MQ Arc-tillägget åtkomst till ett Event Hubs-namnområde är det enklaste sättet att upprätta en säker anslutning från IoT MQ:s Kakfa-anslutning till Event Hubs.

Spara följande Bicep-mall i en fil och tillämpa den med Azure CLI när du har angett giltiga parametrar för din miljö:

Kommentar

Bicep-mallen förutsätter att Det Arc-anslutna klustret och Event Hubs-namnområdet finns i samma resursgrupp, justerar mallen om din miljö är annorlunda.

@description('Location for cloud resources')
param mqExtensionName string = 'mq'
param clusterName string = 'clusterName'
param eventHubNamespaceName string = 'default'

resource connectedCluster 'Microsoft.Kubernetes/connectedClusters@2021-10-01' existing = {
  name: clusterName
}

resource mqExtension 'Microsoft.KubernetesConfiguration/extensions@2022-11-01' existing = {
  name: mqExtensionName
  scope: connectedCluster
}

resource ehNamespace 'Microsoft.EventHub/namespaces@2021-11-01' existing = {
  name: eventHubNamespaceName
}

// Role assignment for Event Hubs Data Receiver role
resource roleAssignmentDataReceiver 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(ehNamespace.id, mqExtension.id, '7f951dda-4ed3-4680-a7ca-43fe172d538d')
  scope: ehNamespace
  properties: {
     // ID for Event Hubs Data Receiver role is a638d3c7-ab3a-418d-83e6-5f17a39d4fde
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', 'a638d3c7-ab3a-418d-83e6-5f17a39d4fde') 
    principalId: mqExtension.identity.principalId
    principalType: 'ServicePrincipal'
  }
}

// Role assignment for Event Hubs Data Sender role
resource roleAssignmentDataSender 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(ehNamespace.id, mqExtension.id, '69b88ce2-a752-421f-bd8b-e230189e1d63')
  scope: ehNamespace
  properties: {
    // ID for Event Hubs Data Sender role is 2b629674-e913-4c01-ae53-ef4638d8f975
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '2b629674-e913-4c01-ae53-ef4638d8f975') 
    principalId: mqExtension.identity.principalId
    principalType: 'ServicePrincipal'
  }
}
# Set the required environment variables

# Resource group for resources
RESOURCE_GROUP=xxx

# Bicep template files name
TEMPLATE_FILE_NAME=xxx

# MQ Arc extension name
MQ_EXTENSION_NAME=xxx

# Arc connected cluster name
CLUSTER_NAME=xxx

# Event Hubs namespace name
EVENTHUB_NAMESPACE=xxx


az deployment group create \
      --name assign-RBAC-roles \
      --resource-group $RESOURCE_GROUP \
      --template-file $TEMPLATE_FILE_NAME \
      --parameters mqExtensionName=$MQ_EXTENSION_NAME \
      --parameters clusterName=$CLUSTER_NAME \
      --parameters eventHubNamespaceName=$EVENTHUB_NAMESPACE

Kafka Anslut or

Med den anpassade Kafka Anslut or-resursen (CR) kan du konfigurera en Kafka-anslutning som kan kommunicera en Kafka-värd och Event Hubs. Kafka-anslutningsappen kan överföra data mellan MQTT-ämnen och Kafka-ämnen med hjälp av Event Hubs som en Kafka-kompatibel slutpunkt.

I följande exempel visas en Kafka Anslut or CR som ansluter till en Event Hubs-slutpunkt med hjälp av IoT MQ:s Azure-identitet. Det förutsätter att andra MQ-resurser har installerats med hjälp av snabbstarten:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: KafkaConnector
metadata:
  name: my-eh-connector
  namespace: azure-iot-operations # same as one used for other MQ resources
spec:
  image:
    pullPolicy: IfNotPresent
    repository: mcr.microsoft.com/azureiotoperations/kafka
    tag: 0.4.0-preview
  instances: 2
  clientIdPrefix: my-prefix
  kafkaConnection:
    # Port 9093 is Event Hubs' Kakfa endpoint
    # Plug in your Event Hubs namespace name
    endpoint: <NAMESPACE>.servicebus.windows.net:9093
    tls:
      tlsEnabled: true
    authentication:
      enabled: true
      authType:
        systemAssignedManagedIdentity:
          # plugin in your Event Hubs namespace name
          audience: "https://<NAMESPACE>.servicebus.windows.net" 
  localBrokerConnection:
    endpoint: "aio-mq-dmqtt-frontend:8883"
    tls:
      tlsEnabled: true
      trustedCaCertificateConfigMap: "aio-ca-trust-bundle-test-only"
    authentication:
      kubernetes: {}

I följande tabell beskrivs fälten i Kafka Anslut or CR:

Fält beskrivning Obligatoriskt
bild Avbildningen av Kafka-anslutningsappen. Du kan ange pullPolicy, repositoryoch tag för avbildningen. Standardvärden visas i föregående exempel. Ja
instanser Antalet instanser av Kafka-anslutningsappen som ska köras. Ja
clientIdPrefix Strängen som ska förberedas för ett klient-ID som används av anslutningsappen. Nej
kafka Anslut ion Anslutningsinformationen för Event Hubs-slutpunkten. Se Kafka Anslut ion. Ja
localBroker Anslut ion Anslutningsinformationen för den lokala asynkron meddelandekö som åsidosätter standardanslutningen för asynkron meddelandekö. Se Hantera lokal asynkron koordinatoranslutning. Nej
logLevel Loggnivån för Kafka-anslutningsappen. Möjliga värden är: spårning, felsökning, information, varning, fel eller dödligt. Standardvärdet är varning. Nej

Kafka-anslutning

Fältet kafkaConnection definierar anslutningsinformationen för Kafka-slutpunkten.

Fält beskrivning Obligatoriskt
slutpunkt Värden och porten för Event Hubs-slutpunkten. Porten är vanligtvis 9093. Du kan ange flera slutpunkter avgränsade med kommatecken för att använda bootstrap-servrars syntax. Ja
Tls Konfigurationen för TLS-kryptering. Se TLS. Ja
autentisering Konfigurationen för autentisering. Se Autentisering. Nej

TLS

Fältet tls aktiverar TLS-kryptering för anslutningen och anger eventuellt en CA-konfigurationskarta.

Fält beskrivning Obligatoriskt
tlsEnabled Ett booleskt värde som anger om TLS-kryptering är aktiverat eller inte. Den måste vara inställd på true för Event Hubs-kommunikation. Ja
trustedCaCertificateConfigMap Namnet på konfigurationskartan som innehåller CA-certifikatet för att verifiera serverns identitet. Det här fältet krävs inte för Event Hubs-kommunikation eftersom Event Hubs använder välkända certifikatutfärdare som är betrodda som standard. Du kan dock använda det här fältet om du vill använda ett anpassat CA-certifikat. Nej

När du anger en betrodd certifikatmottagare måste du skapa en ConfigMap som innehåller den offentliga potionen av certifikatmottagaren i PEM-format och ange namnet i trustedCaCertificateConfigMap egenskapen.

kubectl create configmap ca-pem --from-file path/to/ca.pem

Autentisering

Autentiseringsfältet stöder olika typer av autentiseringsmetoder, till exempel SASL, X509 eller hanterad identitet.

Fält beskrivning Obligatoriskt
enabled Ett booleskt värde som anger om autentisering är aktiverat eller inte. Ja
authType Ett fält som innehåller den autentiseringstyp som används. Se Autentiseringstyp
Autentiseringstyp
Fält beskrivning Obligatoriskt
Sasl Konfigurationen för SASL-autentisering. saslTypeAnge , som kan vara oformaterad, scramSha256 eller scramSha512, och token för att referera till KubernetessecretName- eller Azure Key Vault-hemligheten keyVault som innehåller lösenordet. Ja, om du använder SASL-autentisering
systemAssignedManagedIdentity Konfigurationen för hanterad identitetsautentisering. Ange målgruppen för tokenbegäran, som måste matcha Event Hubs-namnområdet (https://<NAMESPACE>.servicebus.windows.net) eftersom anslutningsappen är en Kafka-klient. En systemtilldelad hanterad identitet skapas automatiskt och tilldelas till anslutningsappen när den är aktiverad. Ja, om du använder hanterad identitetsautentisering
x509 Konfigurationen för X509-autentisering. secretName Ange fältet ellerkeyVault. Fältet secretName är namnet på hemligheten som innehåller klientcertifikatet och klientnyckeln i PEM-format som lagras som en TLS-hemlighet. Ja, om du använder X509-autentisering

Information om hur du använder Azure Key Vault och keyVault hantera hemligheter för Azure IoT MQ i stället för Kubernetes-hemligheter finns i Hantera hemligheter med Hjälp av Azure Key Vault eller Kubernetes-hemligheter.

Autentisera till Event Hubs

Om du vill ansluta till Event Hubs med hjälp av en anslutningssträng- och Kubernetes-hemlighet använder du plain SASL-typ och $ConnectionString som användarnamn och fullständig anslutningssträng som lösenord. Skapa först Kubernetes-hemligheten:

kubectl create secret generic cs-secret -n azure-iot-operations \
  --from-literal=username='$ConnectionString' \
  --from-literal=password='Endpoint=sb://<NAMESPACE>.servicebus.windows.net/;SharedAccessKeyName=<KEY_NAME>;SharedAccessKey=<KEY>'

Referera sedan till hemligheten i konfigurationen:

authentication:
  enabled: true
  authType:
    sasl:
      saslType: plain
      token:
        secretName: cs-secret

Om du vill använda Azure Key Vault i stället för Kubernetes-hemligheter skapar du en Azure Key Vault-hemlighet med anslutningssträng Endpoint=sb://.., refererar till den med vaultSecretoch anger användarnamnet som "$ConnectionString" i konfigurationen.

authentication:
  enabled: true
  authType:
    sasl:
      saslType: plain
      token:
        keyVault:
          username: "$ConnectionString"
          vault:
            name: my-key-vault
            directoryId: <AKV directory ID>
            credentials:
              servicePrincipalLocalSecretName: aio-akv-sp
          vaultSecret:
            name: my-cs # Endpoint=sb://..
            # version: 939ecc2...

Om du vill använda hanterad identitet anger du den som den enda metoden under autentisering. Du måste också tilldela en roll till den hanterade identiteten som ger behörighet att skicka och ta emot meddelanden från Event Hubs, till exempel Azure Event Hubs Data Owner eller Azure Event Hubs Data Sender/Receiver. Mer information finns i Autentisera ett program med Microsoft Entra-ID för åtkomst till Event Hubs-resurser.

authentication:
  enabled: true
  authType:
    systemAssignedManagedIdentity:
      audience: https://<NAMESPACE>.servicebus.windows.net
X.509

För X.509 använder du Kubernetes TLS-hemlighet som innehåller det offentliga certifikatet och den privata nyckeln.

kubectl create secret tls my-tls-secret -n azure-iot-operations \
  --cert=path/to/cert/file \
  --key=path/to/key/file

Ange sedan i konfigurationen secretName .

authentication:
  enabled: true
  authType:
    x509:
      secretName: my-tls-secret

Om du vill använda Azure Key Vault i stället kontrollerar du att certifikatet och den privata nyckeln har importerats korrekt och anger sedan referensen med vaultCert.

authentication:
  enabled: true
  authType:
    x509:
      keyVault:
        vault:
          name: my-key-vault
          directoryId: <AKV directory ID>
          credentials:
            servicePrincipalLocalSecretName: aio-akv-sp
        vaultCert:
          name: my-cert
          # version: 939ecc2...
        ## If presenting full chain also  
        # vaultCaChainSecret:
        #   name: my-chain

Eller om det krävs att du presenterar hela kedjan laddar du upp det fullständiga kedjecertifikatet och nyckeln till AKV som en PFX-fil och använder fältet vaultCaChainSecret i stället.

# ...
keyVault:
  vaultCaChainSecret:
    name: my-cert
    # version: 939ecc2...

Hantera lokal asynkron koordinatoranslutning

Precis som MQTT-bryggan fungerar Event Hubs-anslutningsappen som en klient till IoT MQ MQTT-koordinatorn. Om du har anpassat lyssnarporten och/eller autentiseringen för din IoT MQ MQTT-koordinator åsidosätter du även den lokala MQTT-anslutningskonfigurationen för Event Hubs-anslutningstjänsten. Mer information finns i MQTT bridge local broker connection (MQTT bridge local broker connection).

Kafka Anslut orTopicMap

Med den anpassade kafka Anslut orTopicMap-resursen (CR) kan du definiera mappningen mellan MQTT-ämnen och Kafka-ämnen för dubbelriktad dataöverföring. Ange en referens till en Kafka Anslut or CR och en lista över vägar. Varje väg kan antingen vara en MQTT till Kafka-väg eller en Kafka till MQTT-väg. Till exempel:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: KafkaConnectorTopicMap
metadata:
  name: my-eh-topic-map
  namespace: <SAME NAMESPACE AS BROKER> # For example "default"
spec:
  kafkaConnectorRef: my-eh-connector
  compression: snappy
  batching:
    enabled: true
    latencyMs: 1000
    maxMessages: 100
    maxBytes: 1024
  partitionStrategy: property
  partitionKeyProperty: device-id
  copyMqttProperties: true
  routes:
    # Subscribe from MQTT topic "temperature-alerts/#" and send to Kafka topic "receiving-event-hub"
    - mqttToKafka:
        name: "route1"
        mqttTopic: temperature-alerts/#
        kafkaTopic: receiving-event-hub
        kafkaAcks: one
        qos: 1
        sharedSubscription:
          groupName: group1
          groupMinimumShareNumber: 3
    # Pull from kafka topic "sending-event-hub" and publish to MQTT topic "heater-commands"
    - kafkaToMqtt:
        name: "route2"
        consumerGroupId: mqConnector
        kafkaTopic: sending-event-hub
        mqttTopic: heater-commands
        qos: 0

I följande tabell beskrivs fälten i Kafka Anslut orTopicMap CR:

Fält beskrivning Obligatoriskt
kafka Anslut orRef Namnet på den Kafka Anslut or CR som den här ämneskartan tillhör. Ja
komprimering Konfigurationen för komprimering för meddelanden som skickas till Kafka-ämnen. Se Komprimering. Nej
Dosering Konfigurationen för batchbearbetning för meddelanden som skickas till Kafka-ämnen. Se Batchbearbetning. Nej
partitionStrategy Strategin för att hantera Kafka-partitioner när du skickar meddelanden till Kafka-ämnen. Se Strategi för partitionshantering. Nej
copyMqttProperties Booleskt värde för att kontrollera om MQTT-system- och användaregenskaper kopieras till Kafka-meddelanderubriken. Användaregenskaper kopieras som de är. En del transformering görs med systemegenskaper. Standardvärdet är falskt. Nej
Vägar En lista över vägar för dataöverföring mellan MQTT-ämnen och Kafka-ämnen. Varje väg kan ha antingen ett mqttToKafka eller ett kafkaToMqtt fält, beroende på dataöverföringens riktning. Se Vägar. Ja

Komprimering

Komprimeringsfältet möjliggör komprimering för meddelanden som skickas till Kafka-ämnen. Komprimering bidrar till att minska nätverksbandbredden och lagringsutrymmet som krävs för dataöverföring. Komprimering lägger dock också till en del omkostnader och svarstider i processen. Komprimeringstyperna som stöds visas i följande tabell.

Värde beskrivning
inget Ingen komprimering eller batchbearbetning tillämpas. none är standardvärdet om ingen komprimering har angetts.
gzip GZIP-komprimering och batchbearbetning tillämpas. GZIP är en komprimeringsalgoritm för generell användning som ger en bra balans mellan komprimeringsförhållande och hastighet.
Snappy Snabb komprimering och batchbearbetning tillämpas. Snappy är en snabb komprimeringsalgoritm som erbjuder måttligt komprimeringsförhållande och hastighet.
lz4 LZ4-komprimering och batchbearbetning tillämpas. LZ4 är en snabb komprimeringsalgoritm som erbjuder lågt komprimeringsförhållande och hög hastighet.

Batchbearbetning

Förutom komprimering kan du även konfigurera batchbearbetning för meddelanden innan du skickar dem till Kafka-ämnen. Med batchbearbetning kan du gruppera flera meddelanden och komprimera dem som en enda enhet, vilket kan förbättra komprimeringseffektiviteten och minska nätverkskostnaderna.

Fält beskrivning Obligatoriskt
enabled Ett booleskt värde som anger om batchbearbetning är aktiverat eller inte. Om det inte anges är standardvärdet falskt. Ja
latencyMs Det maximala tidsintervallet i millisekunder som meddelanden kan buffras innan de skickas. Om det här intervallet nås skickas alla buffrade meddelanden som en batch, oavsett hur många eller hur stora de är. Om det inte anges är standardvärdet 5. Nej
maxMessages Det maximala antalet meddelanden som kan bufferas innan de skickas. Om det här talet nås skickas alla buffrade meddelanden som en batch, oavsett hur stora de är eller hur länge de buffras. Om det inte anges är standardvärdet 100000. Nej
maxByte Den maximala storleken i byte som kan bufferas innan de skickas. Om den här storleken nås skickas alla buffrade meddelanden som en batch, oavsett hur många de är eller hur länge de buffras. Standardvärdet är 10000000 (1 MB). Nej

Ett exempel på hur du använder batchbearbetning är:

batching:
  enabled: true
  latencyMs: 1000
  maxMessages: 100
  maxBytes: 1024

Det innebär att meddelanden skickas antingen när det finns 100 meddelanden i bufferten eller när det finns 1 024 byte i bufferten eller när 1 000 millisekunder förflutit sedan den senaste sändningen, beroende på vilket som kommer först.

Strategi för partitionshantering

Strategin för partitionshantering är en funktion som gör att du kan styra hur meddelanden tilldelas till Kafka-partitioner när du skickar dem till Kafka-ämnen. Kafka-partitioner är logiska segment i ett Kafka-ämne som möjliggör parallell bearbetning och feltolerans. Varje meddelande i ett Kafka-ämne har en partition och en förskjutning som används för att identifiera och beställa meddelandena.

Som standard tilldelar Kafka-anslutningen meddelanden till slumpmässiga partitioner med hjälp av en resursallokeringsalgoritm. Du kan dock använda olika strategier för att tilldela meddelanden till partitioner baserat på vissa kriterier, till exempel MQTT-ämnesnamnet eller en MQTT-meddelandeegenskap. Detta kan hjälpa dig att uppnå bättre belastningsutjämning, datalokalitet eller meddelandeordning.

Värde Beskrivning
standard Tilldelar meddelanden till slumpmässiga partitioner med hjälp av en resursallokeringsalgoritm. Det är standardvärdet om ingen strategi har angetts.
static Tilldelar meddelanden till ett fast partitionsnummer som härleds från anslutningsappens instans-ID. Det innebär att varje anslutningsinstans skickar meddelanden till en annan partition. Detta kan bidra till bättre belastningsutjämning och datalokalitet.
Avsnitt Använder MQTT-ämnesnamnet som nyckel för partitionering. Det innebär att meddelanden med samma MQTT-ämnesnamn skickas till samma partition. Detta kan bidra till bättre meddelandeordning och datalokalitet.
egenskap Använder en MQTT-meddelandeegenskap som nyckel för partitionering. Ange namnet på egenskapen i fältet partitionKeyProperty . Det innebär att meddelanden med samma egenskapsvärde skickas till samma partition. Detta kan bidra till bättre meddelandeordning och datalokalitet baserat på ett anpassat kriterium.

Ett exempel på hur du använder en strategi för partitionshantering är:

partitionStrategy: property
partitionKeyProperty: device-id

Det innebär att meddelanden med samma enhets-ID-egenskap skickas till samma partition.

Vägar

Fältet Vägar definierar en lista över vägar för dataöverföring mellan MQTT-ämnen och Kafka-ämnen. Varje väg kan ha antingen ett mqttToKafka eller ett kafkaToMqtt fält, beroende på dataöverföringens riktning.

MQTT till Kafka

Fältet mqttToKafka definierar en väg som överför data från ett MQTT-ämne till ett Kafka-ämne.

Fält beskrivning Obligatoriskt
name Unikt namn på vägen. Ja
mqttTopic MQTT-ämnet att prenumerera på. Du kan använda jokertecken (# och +) för att matcha flera ämnen. Ja
kafkaTopic Kafka-ämnet att skicka till. Ja
kafkaAcks Antalet bekräftelser som anslutningsappen kräver från Kafka-slutpunkten. Möjliga värden är: zero , oneeller all. Nej
Qos Tjänstkvalitetsnivån (QoS) för MQTT-ämnesprenumerationen. Möjliga värden är: 0 eller 1 (standard). QoS 2 stöds för närvarande inte. Ja
sharedSubscription Konfigurationen för att använda delade prenumerationer för MQTT-ämnen. groupNameAnge , som är en unik identifierare för en grupp prenumeranter och groupMinimumShareNumber, som är antalet prenumeranter i en grupp som tar emot meddelanden från ett ämne. Om groupName till exempel är "group1" och groupMinimumShareNumber är 3 skapar anslutningsappen tre prenumeranter med samma gruppnamn för att ta emot meddelanden från ett ämne. Med den här funktionen kan du distribuera meddelanden mellan flera prenumeranter utan att förlora några meddelanden eller skapa dubbletter. Nej

Ett exempel på hur du använder mqttToKafka vägen:

mqttToKafka:
  mqttTopic: temperature-alerts/#
  kafkaTopic: receiving-event-hub
  kafkaAcks: one
  qos: 1
  sharedSubscription:
    groupName: group1
    groupMinimumShareNumber: 3

I det här exemplet skickas meddelanden från MQTT-ämnen som matchar temperaturaviseringar/# till Kafka-ämnet receiving-event-hub med QoS motsvarande 1 och delad prenumerationsgrupp "group1" med resursnummer 3.

Kafka till MQTT

Fältet kafkaToMqtt definierar en väg som överför data från ett Kafka-ämne till ett MQTT-ämne.

Fält beskrivning Obligatoriskt
name Unikt namn på vägen. Ja
kafkaTopic Kafka-ämnet att hämta från. Ja
mqttTopic MQTT-ämnet att publicera till. Ja
consumerGroupId Prefixet för konsumentgrupp-ID:t för varje Kafka till MQTT-väg. Om det inte anges anges konsumentgrupp-ID:t till samma som routningsnamnet. Nej
Qos Tjänstkvalitetsnivån (QoS) för meddelanden som publicerats till MQTT-ämnet. Möjliga värden är 0 eller 1 (standard). QoS 2 stöds för närvarande inte. Om QoS är inställt på 1 publicerar anslutningsappen meddelandet till MQTT-ämnet och väntar sedan på ack innan meddelandet skickas tillbaka till Kafka. För QoS 0 checkar anslutningsappen tillbaka omedelbart utan MQTT-ack. Nej

Ett exempel på hur du använder kafkaToMqtt vägen:

kafkaToMqtt:
  kafkaTopic: sending-event-hub
  mqttTopic: heater-commands
  qos: 0

I det här exemplet publiceras meddelanden från Kafka topic sending-event-hub* till MQTT topic heater-commands med QoS-nivå 0.

Händelsehubbens namn måste matcha Kafka-ämnet

Varje enskild händelsehubb, inte namnområdet, måste namnges exakt samma som det avsedda Kafka-ämnet som anges i vägarna. Dessutom måste anslutningssträng EntityPath matcha om anslutningssträng är begränsad till en händelsehubb. Det här kravet beror på att Event Hubs-namnområdet är analogt med Kafka-klustret och händelsehubbens namn motsvarar ett Kafka-ämne, så Kafka-ämnesnamnet måste matcha namnet på händelsehubben.

Förskjutningar för Kafka-konsumentgrupper

Om anslutningsappen kopplas från eller tas bort och installeras om med samma Kafka-konsumentgrupps-ID lagras konsumentgruppens förskjutning (den sista positionen från där Kafka-konsumentläsningsmeddelanden) lagras i Azure Event Hubs. Mer information finns i Konsumentgrupp för Event Hubs jämfört med Kafka-konsumentgrupp.

MQTT-version

Den här anslutningsappen använder endast MQTT v5.

Publicera och prenumerera på MQTT-meddelanden med azure IoT MQ Preview