2017-01-13 2 views
0

Ich verwende HBase, um einen hohen Datenvolumenstrom zu deduplizieren. Ich dachte, es funktioniert gut mit einem eindeutigen Bezeichner aus jeder Nachricht im Stream als Zeilenschlüssel zu verwenden. Der Endbenutzer sieht jedoch immer noch doppelte Daten aus dem von mir erstellten Ausgabestream. Die einzige mögliche Ursache ist, dass doppelte Nachrichten gleichzeitig konsumiert werden.Deduplizierung gegen HBase mit hohen Volumendaten

Ich habe etwa 50 Threads verbrauchen die gleiche Warteschlange, die aus dem Stream von einem separaten Prozess gefüllt wird. Gibt es einen Weg, um sicherzustellen, dass dies nicht auftritt oder ein besserer Weg, um eine ordnungsgemäße Deduplizierung zu erreichen? Der Prozess beinhaltet ein GET vor dem Einfügen eines neuen Datensatzes.

Antwort

0

Ich sehe einige Probleme mit Ihrem Ansatz. Wenn Sie einen Stream mit 50 Threads lesen, können Sie nicht sicherstellen, dass in HBase kein Eintrag vorhanden ist. Es besteht die Möglichkeit, dass zwei Threads eine duplizierte Nachricht mit derselben ID lesen, HBase prüfen, entscheiden, dass der Eintrag fehlt und Nachrichten weiterleiten.

Die Duplizierungsprüfung in Ihrer gleichzeitigen Umgebung kann nur mit einer Art Mutex funktionieren, und die Leistung hängt von der Häufigkeit der Duplizierung, der Häufigkeit der Nachrichtennutzung und anderen Faktoren ab.

Ich schlage vor, mit einem einzelnen Thread-Consumer zu beginnen und gleichzeitige Lösung zu versuchen, nur wenn Sie mit der Leistung nicht zufrieden sind. Für einen einzelnen Thread können Sie eine Hashtabelle für die Deduplizierung verwenden. Sicher wird es im Laufe der Zeit wachsen, also müssen Sie den Cache verwenden, der abhängig von der Geschäftslogik in einer angemessenen Zeit abläuft.

Verwandte Themen