Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den diskstödda meddelandebufferten är en funktion som gör det möjligt för MQTT-koordinatorn att spilla meddelandeköer för prenumeranter till disk när de överskrider tillgängligt minne. Bestäm före driftsättning om du behöver diskbaserad meddelandebuffring för din MQTT-broker.
Important
Den här inställningen kräver att du ändrar Broker-resursen. Den konfigureras endast vid den första distributionen med hjälp av Azure CLI eller Azure Portal. En ny distribution krävs om konfigurationsändringar i Broker behövs. Mer information finns i Anpassa standard broker.
Den diskstödda meddelandebuffertfunktionen används för effektiv hantering av meddelandeköer i den distribuerade MQTT-koordinatorn. Exempel på fördelar:
- Effektiv köhantering: I en MQTT-förmedlare är varje prenumerant kopplad till en meddelandekö. Hastigheten för en prenumerants meddelandebearbetning påverkar direkt köstorleken. Om en prenumerant bearbetar meddelanden långsamt eller om de kopplar från men begär en beständig MQTT-session kan kön växa sig större än det tillgängliga minnet.
- Databevarande för beständiga sessioner: Den diskstödda meddelandebuffertfunktionen säkerställer att när en kö överskrider det tillgängliga minnet buffrar den sömlöst till disken. Den här funktionen förhindrar dataförlust och stöder MQTT-beständiga sessioner, vilket gör att prenumeranter kan återuppta sina sessioner med sina meddelandeköer intakta när de återansluter. Disken används som tillfällig lagring och fungerar som en spillover från minnet. Data som skrivs till disken är inte varaktiga och går förlorade när podden avslutas. Om minst en podd i varje backendkedja förblir fungerande går inga data förlorade för mäklaren som helhet.
- Handling connectivity challenges: Molnanslutningar behandlas som prenumeranter med beständiga sessioner som kan möta anslutningsutmaningar när de inte kan kommunicera med externa system som en Azure Event Grid MQTT-koordinator på grund av nätverksfel. I sådana scenarier ackumuleras meddelanden (PUBLISHes). MQTT-koordinatorn buffrar intelligent dessa meddelanden till minne eller disk tills anslutningen återställs, vilket säkerställer meddelandeintegriteten.
Som standard är den diskstödda meddelandebuffertfunktionen inaktiverad. I det här fallet finns meddelanden kvar i minnet och tillbakatryck tillämpas på klienter när minnesanvändningen når den gräns som definieras av gränsen för prenumerantkö.
Note
MQTT-brokern skriver data på disk precis så som den tas emot från klienterna, utan ytterligare kryptering. Att skydda disken är avgörande för att skydda de data som mäklaren lagrar.
Konfigurera diskbackad meddelandebuffert
Om du vill konfigurera den diskbaserade meddelandebufferten redigerar du avsnittet diskBackedMessageBuffer i Broker-resursen. För närvarande stöds den här konfigurationen endast med hjälp av flaggan --broker-config-file när du distribuerar Azure IoT Operations med hjälp av kommandot az iot ops create. Mer information finns i Azure CLI-stöd för avancerad MQTT-koordinatorkonfiguration.
Den här inställningen kan inte ändras efter distributionen. Om du vill ändra konfigurationen för den diskstödda meddelandebufferten distribuerar du om IoT Operations-instansen.
Kom igång genom att förbereda en Broker-konfigurationsfil genom att följa API-referensen DiskBackedMessageBuffer .
Distribuera sedan IoT-åtgärder med --broker-config-file flaggan (andra parametrar utelämnas för korthet):
az iot ops create ... --broker-config-file <FILE>.json
Den enklaste konfigurationen innebär till exempel att endast ange den maximala storleken. I det här fallet monteras en emptyDir volym. Värdet maxSize används som storleksgräns för emptyDir volymen. Men det här alternativet är det minst föredragna alternativet på grund av volymens emptyDir begränsningar.
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Om du vill få en bättre konfiguration av en diskstödd meddelandebuffert anger du en tillfällig volym eller ett beständigt volymanspråk för att montera en dedikerad lagringsvolym för meddelandebufferten. Ett exempel:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Anpassa alternativen för brokerns meddelandebuffert genom att justera följande inställningar:
- Konfigurera volymen: Ange en volymanspråksmall för att montera en dedikerad lagringsvolym för meddelandebufferten.
-
Välj en lagringsklass: Definiera önskad lagringsklass med hjälp
storageClassNameav egenskapen . - Definiera åtkomstlägen: Bestäm vilka åtkomstlägen du behöver för volymen. Mer information finns i Beständiga volymåtkomstlägen.
Tillfällig volym
Tillfällig volym är det föredragna alternativet för meddelandebufferten.
För tillfälliga volymer följer du råden i avsnittet Överväganden för lagringsproviders .
Värdet för egenskapen ephemeralVolumeClaimSpec används som egenskapen ephemeral.volumeClaimTemplate.spec för volymen i StatefulSet-specifikationerna för backend-kedjorna.
Om du till exempel vill använda en tillfällig volym med en kapacitet på 1 gigabyte anger du följande parametrar i din Broker-resurs:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Beständiga volymer
Beständiga volymer är nästa föredragna alternativ för meddelandebufferten efter den tillfälliga volymen.
För beständiga volymer följer du råden i avsnittet Överväganden för lagringsproviders .
Värdet för egenskapen persistentVolumeClaimSpec används som egenskapen volumeClaimTemplates.spec för specifikationerna för StatefulSet för backend-kedjorna.
Om du till exempel vill använda en beständiga volym med en kapacitet på 1 gigabyte anger du följande parametrar i din Broker-resurs:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
emptyDir-volym
En emptyDir-volym är det minst föredragna alternativet efter beständiga volymer.
Använd endast en emptyDir volym när du använder ett kluster med filsystemkvoter. Mer information finns på fliken Projektkvot för Filsystem. Om funktionen inte är aktiverad gör klustret regelbunden genomsökning som inte framtvingar någon gräns och gör att värdnoden kan fylla diskutrymmet och markera hela värdnoden som felfri.
Om du till exempel vill använda en emptyDir volym med en kapacitet på 1 gigabyte anger du följande parametrar i din Broker-resurs:
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Överväganden för lagringsprovidrar
Tänk på hur den valda lagringsprovidern fungerar, till exempel när du använder leverantörer som rancher.io/local-path. Om providern inte stöder gränser förbrukar fyllningen av volymen nodens diskutrymme. Det här beteendet kan leda till att Kubernetes markerar noden och alla associerade poddar som ohälsosamma. Det är viktigt att förstå hur lagringsleverantören beter sig i sådana scenarier.
Tip
När du anger en EVC-mall (Ephemeral Volume Claim) eller PVC-mall (Persistent Volume Claim) kan du använda valfri lagringsklass, vilket ökar flexibiliteten för vissa distributionsscenarier. Till exempel visas beständiga volymer som etablerats med hjälp av en PVC-mall i kommandon som kubectl get pv, vilket är användbart för att inspektera klustertillståndet.
Om kubernetes-noderna saknar tillräckligt med lokalt diskutrymme för meddelandebufferten använder du en lagringsklass som tillhandahåller nätverkslagring som Azure Blob Storage. Det är bättre att använda en lokal disk med ett mindre maxSize värde eftersom meddelandebufferten drar nytta av snabb åtkomst och inte kräver hållbarhet.
Disabled
Om du inte vill använda den diskstödda meddelandebufferten ska du inte inkludera egenskapen diskBackedMessageBufferSettings i din Broker-resurs. Det här beteendet är också standard.
Diskbuffert jämfört med beständighet
Den diskbaserade meddelandebufferten och brokerns beständighet skriver båda data till disk, men de har olika syften:
| Feature | Diskbaserad meddelandebuffert | Uthållighet |
|---|---|---|
| Purpose | Spill över prenumerantköer från minnet till disken när de blir för stora | Bevara kritiskt koordinatortillstånd (behållna meddelanden, sessioner, prenumerationer) mellan poddomstarter |
| Durability | Tillfälliga – data går förlorade när podden avslutas | Beständig – data överlever vid omstart av poddar |
| När det bör användas | Långsamma prenumeranter, beständiga offlinesessioner, avbrott i anslutningen till molnet | Du behöver kvarhållna meddelanden eller sessionstillstånd som klarar brokeromstarter |
| Dataomfång | PUBLICERA meddelanden i prenumerantköer | Kvarhållna meddelanden, metadata för prenumerantkön, data i tillståndslagret |
| Konfiguration |
diskBackedMessageBuffer i Broker-resursen |
Beständighetsinställningar vid distribution eller körning |
Note
Diskbufferten och beständigheten kan användas tillsammans. Persistering säkerställer att tillståndet bevaras efter omstarter, medan diskbufferten förhindrar minnesbristsituationer under normal drift.