Parallelisieren von Eingabe-Streams zur Steigerung des Durchsatzes - Entwicklerhandbuch für Amazon Kinesis Data Analytics for SQL Applications

Nach reiflicher Überlegung haben wir beschlossen, Amazon Kinesis Data Analytics für SQL Anwendungen in zwei Schritten einzustellen:

1. Ab dem 15. Oktober 2025 können Sie keine neuen Kinesis Data Analytics für SQL Anwendungen erstellen.

2. Wir werden Ihre Anwendungen ab dem 27. Januar 2026 löschen. Sie können Ihre Amazon Kinesis Data Analytics for SQL Applications weder starten noch betreiben. SQLAb diesem Zeitpunkt ist kein Support mehr für Amazon Kinesis Data Analytics verfügbar. Weitere Informationen finden Sie unter Einstellung von Amazon Kinesis Data Analytics for SQL Applications.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Parallelisieren von Eingabe-Streams zur Steigerung des Durchsatzes

Anmerkung

Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie Kinesis Data Analytics für SQL nicht bereits verwenden. Weitere Informationen finden Sie unter Limits.

Amazon Kinesis Data Analytics-Anwendungen können mehrere In-Application-Streams unterstützen, um eine Anwendung über den Durchsatz eines einzelnen In-Application-Eingabe-Streams hinaus zu skalieren. Weitere Informationen zu In-Application-Eingabe-Streams finden Sie unter Amazon Kinesis Data Analytics für SQL-Anwendungen: So funktioniert's.

In fast allen Fällen skaliert Amazon Kinesis Data Analytics Ihre Anwendung, um die Kapazität der Kinesis-Streams oder Firehose-Quellstreams zu bewältigen, die in Ihre Anwendung einfließen. Wenn der Durchsatz Ihres Quell-Streams jedoch den Durchsatz eines einzelnen In-Application-Eingabe-Streams überschreitet, können Sie die Zahl der von Ihrer Anwendung verwendeten In-Application-Eingabe-Streams explizit erhöhen. Sie führen dies mithilfe des Parameters InputParallelism aus.

Wenn der Parameter InputParallelism größer als eins ist, teilt Amazon Kinesis Data Analytics die Partitionen Ihres Quell-Streams gleichmäßig auf die In-Application-Streams auf. Wenn Ihr Quell-Stream beispielsweise über 50 Shards verfügt und Sie InputParallelism auf 2 festgelegt haben, erhält jeder In-Application-Eingabe-Stream die Eingabe von 25 Quell-Stream-Shards.

Wenn Sie die Zahl der In-Application-Streams erhöhen, muss Ihre Anwendung auf die Daten in jedem Stream explizit zugreifen. Weitere Informationen zum Zugriff auf mehrere In-Application-Streams in Ihrem Code finden Sie unter Zugriff auf getrennte In-Application-Streams in Ihrer Amazon Kinesis Data Analytics-Anwendung.

Obwohl Kinesis Data Streams und Firehose-Stream-Shards beide auf die gleiche Weise auf In-Application-Streams aufgeteilt sind, unterscheiden sie sich in der Art und Weise, wie sie Ihrer Anwendung angezeigt werden:

  • Die Datensätze aus einem Kinesis-Datenstrom enthalten ein shard_id-Feld, über das der Quell-Shard des Datensatzes identifiziert werden kann.

  • Die Datensätze aus einem Firehose-Bereitstellungs-Stream enthalten kein Feld, das den Quell-Shard oder die Partition des Datensatzes identifiziert. Dies liegt daran, dass Firehose diese Informationen von Ihrer Anwendung abstrahiert.

Testen, ob die Zahl der In-Application-Eingabe-Streams erhöht werden sollte

In der Mehrzahl der Fälle kann ein einzelner In-Application-Eingabe-Stream den Durchsatz eines einzelnen Quell-Streams verarbeiten, abhängig von Komplexität und Größe der Eingabe-Streams. Um festzustellen, ob Sie die Anzahl der In-Application-Eingabe-Streams erhöhen müssen, können Sie die MillisBehindLatest Metriken InputBytes und in Amazon überwachen CloudWatch.

Wenn die Metrik InputBytes größer als 100 MB/s ist (oder voraussichtlich größer als diese Rate sein wird), kann dies zu einer Erhöhung von MillisBehindLatest und zu einer Erhöhung der Auswirkung von Anwendungsproblemen führen. Um dies zu Adressieren, empfehlen wir die folgenden Sprachauswahl für Ihre Anwendung:

  • Verwenden Sie mehrere Streams und Kinesis Data Analytics für SQL-Anwendungen, wenn die Skalierungsanforderungen Ihrer Anwendung 100 MB/Sekunde überschreiten.

  • Verwenden Sie Kinesis Data Analytics für Java-Anwendungen, wenn Sie einen einzelnen Stream und eine einzelne Anwendung verwenden möchten.

Wenn die MillisBehindLatest-Metrik eines der folgenden Merkmale aufweist, sollten Sie die InputParallelism-Einstellung Ihrer Anwendung erhöhen:

  • Die MillisBehindLatest-Metrik steigt schrittweise an. Das bedeutet, dass Ihre Anwendung hinter die neuesten Daten im Stream zurückfällt.

  • Die MillisBehindLatest-Metrik liegt konsistent über 1000 (eine Sekunde).

Sie müssen die InputParallelism-Einstellung Ihrer Anwendung nicht erhöhen, wenn Folgendes zutrifft:

  • Die MillisBehindLatest-Metrik nimmt schrittweise ab. Das bedeutet, dass Ihre Anwendung zu den neuesten Daten im Stream aufholt.

  • Die MillisBehindLatest-Metrik liegt unter 1000 (eine Sekunde).

Weitere Informationen zur Verwendung von CloudWatchfinden Sie im CloudWatch -Benutzerhandbuch.

Implementieren mehrerer In-Application-Eingabe-Streams

Sie können beim Erstellen einer Anwendung die Anzahl der In-Application-Eingabe-Streams mittels CreateApplication festlegen. Nach der Erstellung einer Anwendung legen Sie diese Zahl mittels UpdateApplication fest.

Anmerkung

Sie können die InputParallelism-Einstellung nur mithilfe der Amazon Kinesis Data Analytics-API oder der AWS CLIfestlegen. Sie können diese Einstellung nicht über die festlegen AWS Management Console. Informationen zum Einrichten der finden Sie AWS CLIunter Schritt 2: Richten Sie das ein AWS Command Line Interface (AWS CLI).

Festlegen der Zahl der Eingabe-Streams für eine neue Anwendung

Im folgenden Beispiel wird gezeigt, wie Sie mit der API-Aktion CreateApplication die Zahl der Eingabe-Streams einer neuen Anwendung auf 2 festzulegen.

Mehr über CreateApplication erfahren Sie unter CreateApplication.

{ "ApplicationCode": "<The SQL code the new application will run on the input stream>", "ApplicationDescription": "<A friendly description for the new application>", "ApplicationName": "<The name for the new application>", "Inputs": [ { "InputId": "ID for the new input stream", "InputParallelism": { "Count": 2 }], "Outputs": [ ... ], }] }

Festlegen der Zahl der Eingabe-Streams für eine vorhandene Anwendung

Im folgenden Beispiel wird gezeigt, wie Sie mit der API-Aktion UpdateApplication die Zahl der Eingabe-Streams einer vorhandenen Anwendung auf 2 festzulegen.

Mehr über Update_Application erfahren Sie unter UpdateApplication.

{ "InputUpdates": [ { "InputId": "yourInputId", "InputParallelismUpdate": { "CountUpdate": 2 } } ], }

Zugriff auf getrennte In-Application-Streams in Ihrer Amazon Kinesis Data Analytics-Anwendung

Um mehrere In-Application-Eingabe-Streams in Ihrer Anwendung zu verwenden, müssen Sie diese explizit aus den verschiedenen Streams auswählen. Das folgende Codebeispiel zeigt, wie Sie mehrere Eingabe-Streams in der Anwendung abfragen, die Sie in der Einführungsübung erstellt haben.

Im folgenden Beispiel werden die einzelnen Quell-Streams zunächst mittels COUNT zusammengefasst, bevor sie zu einem einzelnen In-Application-Stream mit dem Namen in_application_stream001 kombiniert werden. Die Zusammenfassung der Quell-Streams im Voraus hilft, sicherzustellen, dass der kombinierte In-Application-Stream den Datenverkehr aus mehreren Streams verarbeiten kann, ohne überlastet zu werden.

Anmerkung

Um dieses Beispiel auszuführen und Ergebnisse aus beiden In-Application-Eingabe-Streams zu erhalten, müssen Sie die Anzahl der Shards in Ihrem Quell-Stream und den Parameter InputParallelism in Ihrer Anwendung aktualisieren.

CREATE OR REPLACE STREAM in_application_stream_001 ( ticker VARCHAR(64), ticker_count INTEGER ); CREATE OR REPLACE PUMP pump001 AS INSERT INTO in_application_stream_001 SELECT STREAM ticker_symbol, COUNT(ticker_symbol) FROM source_sql_stream_001 GROUP BY STEP(source_sql_stream_001.rowtime BY INTERVAL '60' SECOND), ticker_symbol; CREATE OR REPLACE PUMP pump002 AS INSERT INTO in_application_stream_001 SELECT STREAM ticker_symbol, COUNT(ticker_symbol) FROM source_sql_stream_002 GROUP BY STEP(source_sql_stream_002.rowtime BY INTERVAL '60' SECOND), ticker_symbol;

Das vorherige Codebeispiel produziert im in_application_stream001 eine Ausgabe ähnlich der folgenden:

Table showing ROWTIME, TICKER, and TICKER_COUNT columns with sample data entries.

Weitere Überlegungen

Beachten Sie Folgendes, wenn Sie mehrere Eingabe-Streams verwenden:

  • Die maximale Anzahl der In-Application-Streams ist 64.

  • Die In-Application-Eingabe-Streams werden gleichmäßig auf die Shards des Eingabe-Streams der Anwendung aufgeteilt.

  • Die Leistung wird durch das Hinzufügen von In-Application-Streams nicht linear skaliert. Das bedeutet, dass eine Verdopplung der Anzahl der In-Application-Streams nicht den Durchsatz verdoppelt. Bei einer typischen Zeilengröße kann jeder In-Application-Stream einen Durchsatz von ungefähr 5.000 bis 15.000 Zeilen pro Sekunde erreichen. Durch die Erhöhung der Zahl der In-Application-Streams auf 10 können Sie einen Durchsatz von 20.000 bis 30.000 Zeilen pro Sekunde erreichen. Die Durchsatzgeschwindigkeit ist von der Zahl, den Datentypen und der Datengröße der Felder im Eingabe-Stream abhängig.

  • Einige Zusammenfassungsfunktionen (wie AVG) können zu unerwarteten Ergebnissen führen, wenn sie auf in verschiedene Shards aufgeteilte Eingabe-Streams angewendet werden. Da Sie die Zusammenfassungsoperation vor der Zusammenfassung zu einem einzelnen Stream auf einzelnen Shards ausführen müssen, werden die Ergebnisse möglicherweise in Richtung auf den Stream gewichtet, der eine größere Zahl von Datensätzen enthält.

  • Wenn Ihre Anwendung weiterhin eine schlechte Leistung aufweist (an einer hohen MillisBehindLatest-Metrik zu erkennen), nachdem Sie die Anzahl Ihrer Eingabe-Streams erhöht haben, haben Sie möglicherweise Ihr Limit an Kinesis-Verarbeitungseinheiten (KPUs) erreicht. Weitere Informationen finden Sie unter Automatisches Skalieren von Anwendungen zur Erhöhung des Durchsatzes.