2016-06-24 9 views
1

Wir planen, ein Protokollierungs-Framework zu bauen und für unsere Skalierung sind wir auf Kafka angewiesen, um eine Lösung zu sein, auf die wir uns konzentrieren wollen. Dies ist, was ich jetzt denke:(Design) Logging-Framework mit Kafka

Set of ~200 application machines -----> (each independently has a built in kafka producer) --------> which write to kafka --------> we use a hdfs sink to eventually write to hdfs. 

Ist es eine gute Idee, um die Anwendung von Maschinen haben direclty nennen kafka? Die Maschinen erreichen fast eine Milliarde Zugriffe pro Tag. Ich möchte nicht, dass irgendetwas die Anwendungsmaschinen beeinflusst. Der Producer auf Anwendungsmaschinen würde einen Async-Sendevorgang ausführen. Ich denke nicht, dass dies CPU-intensive Operationen sind, aber ich bin mir nicht sicher, ob ich etwas vermisse.

Oder sollte ich eine Form von Log Aggegator auf den Client-Rechnern verwenden, die Stücke von Protokollen (sagen wir nach Zeit oder Größe) aggregiert und dann sendet. Dies würde die Belastung meines Kafka-Clusters reduzieren und die Arbeit der Client-Rechner reduzieren. Ich stütze mich auf diese Idee. Gibt es kundenspezifische Log-Aggregatoren, die ich bei Kafka-Herstellern verwenden kann?

Irgendwelche besseren Ideen?

Danke!

Antwort

0

Es ist OK, kafka direkt aus der Anwendung zu rufen. Ich möchte Sie nur darauf aufmerksam machen, dass Sie, wenn Sie eine queue-basierte Lösung für die Kommunikation zwischen der Anwendung und dem Kafka-Produzenten verwenden möchten, stark über die mögliche Warteschlangengröße nachdenken sollten. Es kann den gesamten verfügbaren Speicher verbrauchen, falls Kafka nicht verfügbar ist und die maximale Kapazität der Warteschlange so groß ist.

Es ist auch sinnvoll zu überlegen, ob Sie eine Wiederholungslogik für Ihren Kafka-Hersteller benötigen. Normalerweise erforderte die Wiederholungslogik mehr Ressourcen als die Implementierung von Fire-and-Forget.

Nicht sicher, ob Sie Ihre Idee zu den Client-spezifischen Protokoll-Aggregatoren richtig verstehen, aber wenn Sie Daten aus den Protokolldateien lesen und Kafka hinzufügen möchten, würde ich Ihnen Logstash + Kafka empfehlen. Daher könnte Ihnen das Kafka Output Plugin helfen: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-kafka.html