Wir versuchen, ein BI-System zu erstellen, das sehr große Datenmengen sammelt, die von anderen Komponenten verarbeitet werden sollen.
Wir haben uns entschieden, dass es eine gute Idee ist, eine Zwischenschicht zum Sammeln, Speichern & Amp; verteile die Daten.
Die Daten werden durch eine große Menge von Protokollnachrichten dargestellt. Jede Protokollnachricht hat:
System Besonderheiten:
Wir dachten, dass Kafka diese Arbeit machen würde, aber wir hatten einige Probleme Wir haben versucht, für jeden Aktionstyp und eine Partition für jedes Produkt ein Thema zu erstellen. Auf diese Weise könnten wir 1 Produkt / 1 Aktionstyp extrahieren, um konsumiert zu werden.
Anfangs hatten wir ein Problem mit "zu vielen geöffneten Dateien", aber nachdem wir die Serverkonfiguration geändert haben, um mehr Dateien zu unterstützen, bekommen wir einen Speichermangel (12GB allokiert / Knoten) Außerdem hatten wir Probleme mit der Stabilität von Kafka. Bei einer großen Anzahl von Themen neigt Kafka zum Einfrieren.
Unsere Fragen:
Ich poste diese Antwort, damit andere Benutzer die von uns übernommene Lösung sehen können.
Aufgrund der Einschränkungen von Kafka (die große Anzahl von Partitionen, die das Betriebssystem erreichen fast erreichen maximale offene Dateien) und etwas schwache Leistung haben wir beschlossen, ein benutzerdefiniertes Framework für genau unsere Bedürfnisse mit Bibliotheken wie Apache Commons, Guave, Trove usw., um die Leistung zu erreichen, die wir brauchten.
Das gesamte System (verteilt und skalierbar) hat 3 Hauptteile:
ETL (liest die Daten, verarbeitet sie und schreibt sie in Binärdateien)
Framework Core (wird verwendet, um aus den Binärdateien zu lesen und Statistiken zu berechnen)
Als Nebenbemerkung: Wir haben andere Lösungen wie HBase, Storm usw. ausprobiert, aber keine erfüllt unsere Anforderungen.
Tags und Links java apache-kafka bigdata business-intelligence