Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Kommunikation an einem Strom ist asynchron und bidirektional. Dein Client pusht Datensätze kontinuierlich, ohne auf die Bestätigung zu warten, und der Server sendet Bestätigungen über dieselbe Verbindung zurück, sobald Datensätze dauerhaft werden. Diese Entkopplung ermöglicht es einem einzelnen Client, einen hohen Durchsatz zu halten: Er pusht weiter, während Bestätigungen im Hintergrund eintreffen.
Offsets und die Anerkennungsschleife
Jede Einreichung auf einem Stream, egal ob ein einzelner Datensatz oder ein Batch, erhält einen logischen Offset, der seine Position in diesem Stream markiert. Anstatt jede Übermittlung einzeln anzuerkennen, meldet der Server den kumulativen Fortschritt der Dauerhaftigkeit über den höchsten committeten Offset, den er bislang dauerhaft gemacht hat. Da die Offsets geordnet sind, bestätigt eine Anerkennungsmeldung diese Übermittlung und alle früheren Übermittlungen.
Dies ist die Bestätigungsschleife, und sie sorgt dafür, dass die Verbindung sowohl schnell als auch zuverlässig bleibt:
- Der Client pusht Datensätze und speichert sie in einem lokalen In-Flight-Puffer.
- Der Server speichert Datensätze dauerhaft und sendet regelmäßig den höchsten bestätigten Offset zurück.
- Nach Erhalt dieses Offsets kann der Client bedenkenlos alle gepufferten Datensätze bis einschließlich diesen Offset verwerfen, da diese Datensätze nun dauerhaft sind.
Wenn Sie ein Zerobus Ingest SDK verwenden, führt das SDK diese Schleife für Sie aus. Er verfolgt Offsets, bewahrt den In-Flight-Puffer und verarbeitet Anerkennungen im Hintergrund, während Ihr Produzent weiterpusht. Sie implementieren die Schleife nicht selbst. Was du optional kontrollierst, ist, wie du die Haltbarkeit beobachtest:
- Senden Sie weiter; das SDK verarbeitet Bestätigungen, sobald sie eintreffen.
- Blockieren Sie für einen Offset nur, wenn Ihr Antrag warten muss, bis ein bestimmtes Dokument dauerhaft ist. Siehe unten.
- Registrieren Sie einen Bestätigungsaufruf, um asynchron auf Bestätigungen und Fehler zu reagieren, ohne zu blockieren. Siehe Rückrufe zur Bestätigung.
Du würdest die Offset-Tracking- und Pufferschleife nur selbst implementieren, wenn du einen eigenen Client baust, der kein SDK verwendet.
Der In-Flight-Puffer ist durch ein konfigurierbares In-Flight-Datenlimit begrenzt. Die Datenerfassung erfolgt asynchron, bis der Puffer voll ist; ab diesem Punkt blockieren Erfassungsaufrufe, bis Anerkennungen eintreffen und wieder Platz schaffen. Passen Sie das Limit für Ihre Arbeitslast an und beachten Sie, dass gepufferte Datensätze während des Flugs den Kundenspeicher verbrauchen. Für die Option und deren Standardeinstellung siehe das Zerobus SDK-Repository.
Wenn die Verbindung unterbrochen wird, wurden die Daten, die sich noch im In-Flight-Puffer befinden (jene jenseits des zuletzt zugesagten Offsets), nicht als dauerhaft bestätigt, sodass sie wiederholt werden können. Siehe Erholungs- und Wiederholungsmuster.
Die Bestätigung bestätigt die Haltbarkeit, nicht die Abfragbarkeit. Ein bestätigter Offset bedeutet, dass diese Datensätze dauerhaft gespeichert werden und nicht verloren gehen. Zerobus Ingest materialisiert kurz darauf persistente Datensätze in einem separaten Schritt in der Delta-Tabelle; ab diesem Zeitpunkt sind die Daten nach etwa 5 Sekunden abfragbar. Mehr zur Latenz finden Sie unter Latenz.
Warten auf einen Datensatz gegenüber der Maximierung des Durchsatzes
Sie warten auf den Offset eines Datensatzes, wenn Ihre Anwendung ihre weitere Ausführung blockieren muss, bis bekannt ist, dass dieser Datensatz dauerhaft ist, zum Beispiel bevor sie die Verarbeitung gegenüber einem vorgelagerten System bestätigt. Warten bedeutet die Synchronisation auf Anwendungsebene, nicht eine Voraussetzung für Langlebigkeit. Ein Datensatz wird durch die Anerkennungsschleife dauerhaft, egal ob Sie dafür blockieren oder nicht.
Blockierung hat Durchsatzkosten:
- Das Warten bei jedem Datensatz verwandelt die Datenerfassung in einen faktisch synchronen Workflow. Das Blockieren jeder Nachricht vor dem Senden der nächsten verhindert, dass der Client den vollen Durchsatz von Zerobus Ingest erreicht.
- Die Erfassung mit hohem Durchsatz erfolgt kontinuierlich und asynchron. Der Client sendet weiterhin Datensätze, während Bestätigungen für Gruppen früherer Datensätze eintreffen, anstatt bei jedem einzelnen zu pausieren. Warte auf einen bestimmten Offset nur an den Checkpoints, an denen deine Anwendung diese Garantie wirklich benötigt, oder nutze einen Bestätigungsaufruf, um den Fortschritt ohne Blockade zu verfolgen.
Informationen zu den Erfassungsmethoden, dazu, wann für einen Offset blockiert werden soll und wie Anerkennungs-Callbacks funktionieren, finden Sie unter Nachrichtenblockierung und Anerkennung.
Anordnen in einem Stream
Anerkennungen und Offsets erfolgen pro Datenstrom: Die Reihenfolge ist innerhalb eines einzelnen Datenstroms garantiert, nicht global für mehrere Datenströme. Wie die Reihenfolge innerhalb eines Streams funktioniert und wie Sie Ihr Design darauf abstimmen, erfahren Sie unter Reihenfolgegarantien.