Ich bin neugierig, ob es absolut notwendig ist, dass eine Spark-Streaming-Anwendung ordnungsgemäß heruntergefahren wird oder dass das Risiko besteht, dass doppelte Daten über das Write-Ahead-Protokoll verursacht werden. Im folgenden Szenario skizziere ich die Reihenfolge der Schritte, bei denen ein Warteschlangenempfänger mit einer Warteschlange interagiert, erfordert Bestätigungen für Nachrichten.
Ist mein Verständnis korrekt, wie benutzerdefinierte Empfänger implementiert werden sollen, welche Probleme mit der Duplizierung damit verbunden sind, und ist es normal, ein ordnungsgemäßes Herunterfahren zu erfordern?
Bottom line: Es hängt von Ihrer Ausgabeoperation ab.
Verwendung des Direct-API-Ansatzes, der auf V1 eingeführt wurde . 3 , beseitigt Inkonsistenzen zwischen Spark Streaming und Kafka, sodass jeder Datensatz von Spark Streaming effektiv genau einmal empfangen wird, trotz Fehlern, da Offsets von Spark Streaming innerhalb seiner Checkpoints verfolgt werden.
Um eine genau einmalige Semantik für die Ausgabe Ihrer Ergebnisse zu erhalten, muss Ihre Ausgabeoperation, die die Daten in einem externen Datenspeicher speichert, entweder idempotent sein oder eine atomare Transaktion, die Ergebnisse und Offsets speichert.
Weitere Informationen zur Direct API und ihrer Verwendung finden Sie in diesen Blogbeitrag von Databricks.
Tags und Links apache-spark spark-streaming