Wie können Kafka-Einschränkungen vermieden werden? [geschlossen]

8

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:

  • ein Produkt
  • ein Aktionstyp
  • ein Datum
  • Nachrichtennutzlast

System Besonderheiten:

  • Durchschnitt: 1,5 Millionen Nachrichten / Minute
  • peak: 15 Millionen Nachrichten / Minute
  • Die durchschnittliche Nachrichtengröße beträgt: 700 Byte (ca. 1,3 TB / Tag)
  • wir haben 200 Produkte
  • Wir haben 1100 Aktionstypen
  • Die Daten sollten alle 5 Minuten aufgenommen werden
  • Die Consumer-Anwendungen benötigen normalerweise 1-2-3 Produkte mit 1-2-3 Aktionstypen (wir benötigen einen schnellen Zugriff für 1 Produkt / 1 Aktionstyp)

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:

  • Ist Kafka für unser Anwendungsszenario geeignet? Kann es so viele Themen / Partitionen unterstützen?
  • Können wir die Daten in Kafka auf andere Weise organisieren, um diese Probleme zu vermeiden, aber trotzdem eine gute Zugriffsgeschwindigkeit für 1 Produkt / 1 Aktionstyp zu haben?
  • Empfehlen Sie andere Kafka-Alternativen, die dafür besser geeignet sind?
Stephan 21.07.2014, 11:06
quelle

1 Antwort

3

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:

  1. ETL (liest die Daten, verarbeitet sie und schreibt sie in Binärdateien)

  2. Framework Core (wird verwendet, um aus den Binärdateien zu lesen und Statistiken zu berechnen)

  3. API (wird von vielen Systemen verwendet, um Daten für die Anzeige zu erhalten)

Als Nebenbemerkung: Wir haben andere Lösungen wie HBase, Storm usw. ausprobiert, aber keine erfüllt unsere Anforderungen.

    
Stephan 27.04.2015, 08:25
quelle