Ist es möglich, einen zuverlässigen Empfänger zu implementieren, der ein nicht graziöses Herunterfahren unterstützt?

8

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.

  1. Der Spark-Queue-Empfänger zieht einen Stapel Nachrichten aus der Warteschlange.
  2. Der Spark Queue-Empfänger speichert den Nachrichtenstapel im Write-Ahead-Protokoll.
  3. Spark-Anwendung wird beendet, bevor eine Bestätigung an die Warteschlange gesendet wird.
  4. Die Spark-Anwendung wird erneut gestartet.
  5. Die Nachrichten im Write-ahead-Protokoll werden über die Streaming-Anwendung verarbeitet.
  6. Der Warteschlangenempfänger der Warteschlange zieht eine Gruppe von Nachrichten aus der Warteschlange, die bereits in Schritt 1 angezeigt wurden, weil sie nicht als empfangen bestätigt wurden.
  7. ...

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?

    
stphung 29.07.2015, 18:47
quelle

1 Antwort

2

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.

    
kerkero 02.08.2015 15:58
quelle

Tags und Links