2017-06-22 2 views
0

Meine Anforderung besteht darin, Protokolldaten von mehreren Maschinen zu lesen. LogStash - Soweit ich weiß, können LogStash Agenten auf allen Rechnern installiert werden und LogStash kann Daten nach Kafka pushen wenn es ankommt. Selbst wenn eine neue Zeile zu einer Datei hinzugefügt wird, liest LogStash nur die nicht die gesamte Datei nochmal.LogStash durch Spark-Streaming ersetzen

Fragen

  1. ich es jetzt möglich, das gleiche mit Spark-Streaming zu erreichen?

  2. Wenn ja, was ist der Vorteil \ Nachteil der Verwendung von Spark Streaming über LogStash?

+0

Warum möchten Sie Spark Streaming verwenden? –

Antwort

1

LogStash Agenten auf allen

Ja, Sie einige Mittel auf allen Maschinen müssen

Maschinen installiert werden. Die Lösung im ELK-Stack ist eigentlich FileBeat, keine Logstash-Agenten. Logstash ist in diesem Szenario eher ein Server/Nachrichtenbus.

In ähnlicher Weise müsste ein Spark-Job ausgeführt werden, um eine Datei zu lesen. Persönlich hätte ich alles andere hinter einer Protokolldatei (sogar wörtlich nur tail -f file.log, die einen Netzsockel herauspeitscht). Das Schreiben und Verteilen von Spark JAR + Konfigurationsdateien ist ein klarer Nachteil. Besonders wenn Sie Java auf jedem Rechner installieren müssen, auf dem Sie sich anmelden.

Flume oder Fluentd sind andere weit verbreitete Optionen für verteilte Logsammlung mit Kafka Zielen

LogStash Daten an Kafka schieben

The Beats framework has a Kafka Output, aber Sie können auch zuerst Logstash versenden.

Es ist nicht klar, ob Sie LogStash ausschließlich für Kafka verwenden oder ElasticSearch hier verwenden, aber Kafka Connect bietet eine Dateiquelle (und Elasticsearch-Ausgabe).

liest nur, dass nicht die gesamte Datei erneut

Was auch immer Werkzeug, das Sie (einschließlich Spark-Streaming der Quelle der Datei) verwenden, werden in der Regel Verzeichnisse von Dateien beobachten (weil, wenn Sie keine Dateien rotierenden Protokoll, Sie mache es falsch. Wenn Dateien eintreffen oder Bytes in eine Datei geschrieben werden, muss das Framework intern eine Art von Markierung festschreiben, um anzuzeigen, welche Elemente bisher verbraucht wurden. Um den Agent zurückzusetzen, sollten diese Metadaten entfernt/zurückgesetzt werden können, um von Anfang an zu beginnen.