Ich habe ein AWS Kinesis Firehose-Stream-Daten in s3 mit folgenden Konfiguration setzen:Concatenate s3-Dateien, wenn AWS Firehose mit
S3 buffer size (MB)* 2
S3 buffer interval (sec)* 60
Alles funktioniert gut. Das einzige Problem ist, dass Firehose eine s3-Datei für jeden Datenblock erstellt. (In meinem Fall eine Datei jede Minute, wie im Screenshot). Im Laufe der Zeit gibt es eine Menge Dateien: 1440 Dateien pro Tag, 525k Dateien pro Jahr.
Das ist schwer zu verwalten (zum Beispiel, wenn ich den Eimer in einen anderen kopieren möchte ich brauchen würde, jede einzelne Datei eins nach dem anderen, und dies würde einige Zeit dauern, kopieren).
Zwei Fragen:
- Gibt es eine Möglichkeit Kinesis zu einer Gruppe sagen/verketten alt zusammen Dateien. (Dateien, die älter als 24 Stunden sind, werden z. B. einen Tag lang in Gruppen zusammengefasst).
- Wie wirkt sich die COPY-Rotverschiebungsleistung aus, wenn
COPY
aus einer Vielzahl von s3-Dateien im Vergleich zu nur einigen wenigen gefunden wird? Ich habe das nicht genau gemessen, aber meiner Erfahrung nach ist die Performance mit vielen kleinen Dateien viel schlechter. Soweit ich mich erinnern kann, ist bei großen Dateien ein COPY von etwa 2 Millionen Zeilen ungefähr ~ 1 Minute. 2M Zeilen mit vielen kleinen Dateien (~ 11k Dateien), dauert es bis zu 30 Minuten.
Meine beiden wichtigsten Anliegen sind:
- Bessere Leistung Rotverschiebung COPY (von s3)
- Einfachere Gesamt s3 Dateiverwaltung (Backup, Manipulation jeglicher Art)
Ja. Leider möchte ich in meinem Fall, dass die Aufzeichnungen schnell geliefert werden. Ich kann es mir nicht leisten, 900 Sekunden zu warten, weil ich frische Daten in Semi-Realtime möchte. Also überlege ich mir eine Lösung, bei der ich alle Daten in eine Rotverschiebung hochlade und dann alles auf einmal in einer einzigen (oder nur wenigen) s3-Dateien entlade. –
Eine weitere Idee für den Anwendungsfall: i) Richten Sie AWS Lambda auf Ihren S3-Bucket ein. ii) Halten Sie die AWS Kinesis Firehose Stream-Einstellungen nach Ihren Wünschen. iii) Folglich wird es zu viele Dateien geben, wie in der Frage angegeben. iv) Wann immer es eine Veröffentlichung im Bucket geben sollte, sollte die Lambda-Funktion ausgelöst werden, die mehrere Dateien zu einem zusammenfassen und in einen anderen Bucket setzen würde. Wenn Sie es nicht in einen anderen Bucket einfügen möchten, können Sie es in denselben Container mit einem anderen Präfix einfügen, sodass die Lambda-Funktion nicht erneut ausgelöst wird. Das wäre einfacher. –