2017-03-08 2 views
3

ich über spark und seinen real-time stream processing.I verwirrt lese füttern sind, dass selbst Warum dann liest Strom von der Quelle wie twitter oder Datei, Wenn spark kann wir Benötigen Sie kafka, um Daten an spark zu senden? Es wäre toll, wenn mir jemand erklärt, welchen Vorteil wir haben, wenn wir spark mit kafka verwenden. Vielen Dank.Warum müssen wir kafka Daten zu Apache Funken

+3

Sie brauchen * es * nicht - sie dienen verschiedenen Zwecken. Kafka präsentiert eine einheitliche Quelle zum Konsumieren ist alles. –

Antwort

3

Kafka bietet eine Entkopplung und Pufferung Ihres Eingabestroms.

Nehmen Sie Twitter-Daten zum Beispiel, afaik verbinden Sie mit der Twitter-API und erhalten Sie einen konstanten Strom von Tweets, die Kriterien, die Sie angegeben haben. Wenn Sie jetzt Ihre Spark-Jobs für eine Stunde herunterfahren, um etwas auf Ihren Servern zu tun oder eine neue Version ausrollen, werden Sie Tweets von dieser Stunde an verpassen.

Nun stellen Sie sich vor, Sie setzen Kafka vor Ihre Spark-Jobs und haben einen sehr einfachen Ingest-Thread, der nichts anderes als eine Verbindung zur API herstellt und Tweets an Kafka schreibt, wo die Spark-Jobs sie abrufen. Da Kafka alles auf Disc speichert, können Sie Ihre Verarbeitungsjobs herunterfahren, Wartungsarbeiten durchführen und wenn sie neu gestartet werden, werden sie alle Daten von dem Zeitpunkt abholen, als sie offline waren.

Wenn Sie Ihre Verarbeitungsjobs in signifikanter Weise ändern und Daten der letzten Woche erneut verarbeiten möchten, können Sie dies leicht tun, wenn Sie Kafka in Ihrer Kette haben (sofern Sie Ihre Aufbewahrungszeit hoch genug gesetzt haben) Wechsle einfach deine neuen Jobs aus und ändere die Offsets in Kafka so, dass deine Jobs alte Daten erneut lesen und wenn das erledigt ist, ist dein Data Store mit deinem neuen Bearbeitungsmodell auf dem neuesten Stand.

Es gibt eine good article auf das allgemeine Prinzip geschrieben von Jay Kreps, einer der Menschen hinter Kafka, geben Sie das, wenn Sie mehr wissen wollen.

+0

Vielen Dank für Ihre Antwort. Es ergibt Sinn für mich. Ich habe nur noch eine Frage bezüglich der Erstellung von Daten aus der letzten Woche, wie Sie gesagt haben. Was, wenn wir die Daten auch in HDFS speichern. In diesem Fall besteht kafka darin, Daten nur dann zu speichern, wenn das System heruntergefahren ist, oder? Ich diskutiere eigentlich im Sinne der Lambda-Architektur. In serving layer können wir Daten von hadoop verwenden und kafka wird die neuen Daten halten. Ist es richtig? Vielen Dank. –

+0

können Sie Spark-Streaming mit der HDFS-Eingabe verwenden und neue Dateien aus einem angegebenen Verzeichnis verarbeiten. Es ist jedoch viel schwieriger, die Neuverarbeitung ab einem bestimmten Zeitpunkt zu steuern - Sie müssten mit dem Verschieben von Dateien zwischen HDFS-Verzeichnissen herumhantieren .... Mit Kafka können Sie angeben, von welcher Position (Offset) Sie können Beginnen Sie mit der Verarbeitung Ihrer Daten. Auch wenn Ihr Spark-Job lange läuft - die Verwaltung von Dateien kann zu einem Problem werden - werden Sie wahrscheinlich nicht Millionen von Dateien im selben HDFS-Dir-Verzeichnis haben, nehme ich an. Sie müssen einen Prozess entwerfen, um alte Dateien oder Ähnliches zu löschen/verschieben. – Marina

+0

Hängt davon ab, wie Sie die Daten in HDFS ablegen, Sie können in ein Staging-Verzeichnis schreiben und von dort regelmäßig einen Oozie-Job ausführen, um die Daten in eine partitionierte Hive-Tabelle einzufügen, so würde Hive sich um Ihre zugrunde liegende Dateiorganisation kümmern Sie haben eine einfache Möglichkeit, Daten im Stapel zu verarbeiten (vorausgesetzt, sie haben einen Zeitstempel, den ich annehmen kann) und sogar alte Daten zu löschen. Es gibt wirklich keinen richtigen oder falschen Weg hier, es hängt alles stark davon ab, was genau deine Anforderungen sind :) –

0

Kafka entkoppelt alles, Consumer-Producer müssen nicht voneinander wissen. Kafka bietet Pub-Sub-Modell basierend auf Thema.

Aus mehreren Quellen können Sie Daten (Nachrichten) zu jedem Thema in Kafka schreiben, und Consumer (Spark oder irgendetwas) kann Daten basierend auf Thema konsumieren.

Mehrere Verbraucher können Daten aus dem gleichen Thema wie Kafka Daten für einen Zeitraum speichern.

Aber am Ende hängt es von Ihrem Anwendungsfall ab, ob Sie wirklich einen Broker brauchen.

Verwandte Themen