Lösungen für Streaming-Daten: Beispiele - Streamen von Datenlösungen in AWS mit Amazon Kinesis

Lösungen für Streaming-Daten: Beispiele

Szenario 1: Internetangebot basierend auf dem Standort

Das Unternehmen InternetProvider bietet Internetdienste mit einer Vielzahl von Bandbreitenoptionen für Benutzer auf der ganzen Welt. Wenn sich ein Benutzer für das Internet anmeldet, bietet das Unternehmen InternetProvider dem Benutzer je nach geografischem Standort verschiedene Bandbreitenoptionen an. Vor dem Hintergrund dieser Anforderungen implementierte das Unternehmen InternetProvider Amazon Kinesis Data Stream, um die Benutzer- und Standortdaten zu nutzen. Die Benutzer- und Standortdaten werden mit verschiedenen Bandbreitenoptionen angereichert, bevor sie an die Anwendung zurückgegeben werden. AWS Lambda ermöglicht diese Anreicherung in Echtzeit.

Verarbeitung von Datenströmen mit AWS Lambda

Verarbeitung von Datenströmen mit AWS Lambda

Amazon Kinesis Data Streams

Mit Amazon Kinesis Data Streams können Sie benutzerdefinierte Echtzeitanwendungen mit gängigen Frameworks für die Datenstromverarbeitung erstellen und Streaming-Daten in viele verschiedene Datenspeicher laden. Ein Kinesis-Stream kann so konfiguriert werden, dass er kontinuierlich Ereignisse von Hunderttausenden von Datenproduzenten empfängt, die aus Quellen wie Website-Clickstreams, IoT-Sensoren, Feeds in sozialen Medien und Anwendungsprotokollen stammen. Innerhalb von Millisekunden stehen die Daten zum Lesen und Verarbeiten durch Ihre Anwendung zur Verfügung.

Bei der Implementierung einer Lösung mit Kinesis Data Streams erstellen Sie benutzerdefinierte Datenverarbeitungsanwendungen, die als Kinesis-Data-Streams-Anwendungen bezeichnet werden. Eine typische Kinesis-Data-Streams-Anwendung liest Daten in Form von Datensätzen aus einem Kinesis-Stream.

Die in Kinesis-Data-Streams übertragenen Daten sind hochverfügbar und elastisch und stehen innerhalb von Millisekunden zur Verfügung. Sie können kontinuierlich verschiedene Datentypen wie Clickstreams, Anwendungsprotokolle und soziale Medien aus Hunderttausenden von Quellen einem Kinesis-Stream hinzufügen. Die Daten sind dann innerhalb von Sekunden für Ihre Kinesis-Anwendungen verfügbar und können aus dem Stream gelesen und dann verarbeitet werden.

Amazon Kinesis Data Streams ist ein vollständig verwalteter Daten-Streaming-Service. Er verwaltet Infrastruktur, Speicher, Vernetzung und Konfiguration, die zum Streamen Ihrer Daten mit dem von Ihrer Anwendung benötigten Durchsatzgrad erforderlich sind.

Senden von Daten an Amazon Kinesis Data Streams

Es gibt mehrere Möglichkeiten, Daten an Kinesis Data Streams zu senden, wodurch Sie bei der Gestaltung Ihrer Lösungen flexibel sind.

  • Sie können Code mit einem der AWS SDKs schreiben, die von mehreren gängigen Sprachen unterstützt werden.

  • Sie können den Amazon Kinesis Agent verwenden, ein Tool zum Senden von Daten an Kinesis Data Streams.

Die Amazon Kinesis Producer Library (KPL) vereinfacht die Entwicklung von Produzentenanwendungen, wodurch Entwickler einen hohen Schreibdurchsatz auf einen oder mehreren Kinesis-Datenströmen erzielen.

Die KPL ist eine einfach zu verwendende, hochgradig konfigurierbare Bibliothek, die Sie auf Ihren Hosts installieren. Sie dient als Vermittler zwischen dem Code Ihrer Produzentenanwendung und den Kinesis-Streams-API-Aktionen. Weitere Informationen über die KPL und ihre Fähigkeit, Ereignisse synchron und asynchron zu erzeugen, sowie Codebeispiele finden Sie unter Schreiben in Kinesis-Datenströme mithilfe der KPL

In der API von Kinesis Data Streams gibt es zwei verschiedene Vorgänge, mit denen Daten zu einem Datenstrom hinzugefügt werden: PutRecords und PutRecord. Mit dem PutRecords-Vorgang werden mehrere Datensätze pro HTTP-Anfrage an Ihren Stream gesendet, während mit PutRecord einen Datensatz pro HTTP-Anfrage übermittelt wird. Um einen höheren Durchsatz für die meisten Anwendungen zu erreichen, verwenden Sie PutRecords.

Weitere Informationen zu diesen APIs finden Sie unter Hinzufügen von Daten zu einem Stream. Die Details für jeden API-Vorgang finden Sie in der Referenz zur API von Amazon Kinesis Data Streams.

Verarbeitung von Daten in Amazon Kinesis Data Streams

Um Daten aus Kinesis-Streams zu lesen und zu verarbeiten, müssen Sie eine Verbraucheranwendung erstellen. Es gibt verschiedene Möglichkeiten, Verbraucher für Kinesis Data Streams zu erstellen. Einige dieser Ansätze umfassen die Verwendung von Amazon Kinesis Data Analytics zur Analyse von Streaming-Daten mit KCL, die Verwendung von AWS Lambda, -Streaming-ETL-AufträgenAWS Glue und die direkte Verwendung der API von Kinesis Data Streams.

Verbraucheranwendungen für Kinesis Data Streams können mit der KCL entwickelt werden, die Sie bei der Nutzung und Verarbeitung von Daten aus Kinesis Data Streams unterstützt. Die KCL übernimmt viele der komplexen Aufgaben im Zusammenhang mit verteilter Datenverarbeitung, wie beispielsweise die Vornahme der Lastenverteilung zwischen mehreren Instances, das Reagieren auf Instance-Fehler, das Einrichten von Prüfpunkten für verarbeitete Datensätze und das Reagieren auf Resharding. Die KCL ermöglicht Ihnen, sich auf das Schreiben der Datensatzverarbeitungslogik zu konzentrieren. Weitere Informationen zum Erstellen einer eigenen KCL-Anwendung finden Sie unter Verwenden der Kinesis Client Library.

Sie können Lambda-Funktionen abonnieren, um automatisch Datensatz-Batches aus Ihrem Kinesis-Stream zu lesen und sie zu verarbeiten, wenn Datensätze im Stream erkannt werden. AWS Lambda fragt den Stream regelmäßig (einmal pro Sekunde) nach neuen Datensätzen ab. Werden neue Datensätze erkannt, ruft der Service die Lambda-Funktion auf und übergibt die neuen Datensätze als Parameter. Die Lambda-Funktion wird nur ausgeführt, wenn neue Datensätze erkannt werden. Sie können eine Lambda-Funktion einem Verbraucher mit gemeinsamem Durchsatz (Standard-Iterator) zuordnen.

Sie können einen Verbraucher erstellen, der eine Funktion namens Enhanced Fan-Out (Erweitertes Rundsenden) verwendet, wenn Sie einen speziellen Durchsatz benötigen, der nicht mit anderen Verbrauchern, die Daten aus dem Stream empfangen, konkurrieren soll. Mit dieser Funktion können Verbraucher Datensätze aus einem Stream mit einem Durchsatz von bis zu zwei MB Daten pro Sekunde und Shard empfangen.

In den meisten Fällen sollte Kinesis Data Analytics, KCL, AWS Glue oder AWS Lambda verwendet werden, um Daten aus einem Stream zu verarbeiten. Wenn Sie möchten können Sie jedoch mit der API von Kinesis Data Streams eine Verbraucheranwendung von Grund auf neu erstellen. Die API von Kinesis Data Streams bietet die Methoden GetShardIterator und GetRecords zum Abrufen von Daten aus einem Stream.

Bei diesem Pull-Modell extrahiert Ihr Code Daten direkt aus den Shards des Streams. Weitere Informationen zum Schreiben Ihrer eigenen Verbraucheranwendung mithilfe der API finden Sie unter Entwickeln benutzerdefinierter Verbraucher mit gemeinsam genutztem Durchsatz mithilfe des AWS SDK für Java. Details zur API finden Sie in der Referenz zur API von Amazon Kinesis Data Streams.

Verarbeitung von Datenströmen mit AWS Lambda

Mit AWS Lambda können Sie Code ausführen, ohne Server bereitstellen und verwalten zu müssen. Mit Lambda können Sie Code für praktisch jeden Anwendungstyp oder Backend-Service ohne den damit verbundenen Verwaltungsaufwand ausführen. Sie laden einfach Ihren Code hoch und Lambda kümmert sich darum, dass Ihr Code mit hoher Verfügbarkeit ausgeführt und skaliert wird. Sie können Ihren Code so einrichten, dass er automatisch von anderen AWS-Services ausgelöst wird, oder ihn indirekt von einer beliebigen Web- oder Mobil-App aufrufen.

AWS Lambda lässt sich nativ in Amazon Kinesis Data Streams integrieren. Die Komplexität von Abfragen, Prüfpunkten und Fehlerbehandlung wird durch die Verwendung dieser nativen Integration reduziert. Dadurch kann sich der Lambda-Funktionscode auf die Verarbeitung der Geschäftslogik konzentrieren.

Sie können eine Lambda-Funktion einem Verbraucher mit gemeinsam genutzten Durchsatz (Standard-Iterator) oder einem Verbraucher mit dediziertem Durchsatz mit erweitertem Rundsenden zuordnen. Bei einem Standard-Iterator fragt Lambda jeden Shard in Ihrem Kinesis-Stream nach Datensätzen ab, die das HTTP-Protokoll verwenden. Um die Latenz zu minimieren und den Lesedurchsatz zu maximieren, können Sie einen Datenstromverbraucher mit erweitertem Rundsenden erstellen. Stream-Verbraucher in dieser Architektur erhalten eine dedizierte Verbindung zu jedem Shard, ohne mit anderen Anwendungen zu konkurrieren, die aus demselben Stream lesen. Amazon Kinesis Data Streams überträgt Datensätze über HTTP/2 an Lambda.

Standardmäßig ruft AWS Lambda Ihre Funktion auf, sobald Datensätze im Stream verfügbar sind. Um die Datensätze für Batch-Szenarien zu puffern, können Sie an der Ereignisquelle ein Batch-Fenster von bis zu fünf Minuten implementieren. Wenn Ihre Funktion einen Fehler zurückgibt, wiederholt Lambda die Batch-Verarbeitung, bis diese erfolgreich ist oder die Daten ablaufen.

Übersicht

Das Unternehmen InternetProvider nutzte Amazon Kinesis Data Streams zum Streamen von Benutzer- und Standortdaten. Der Datenstrom wurde von AWS Lambda genutzt, um die Daten mit Bandbreitenoptionen anzureichern, die in der Bibliothek der Funktion gespeichert sind. Nach der Anreicherung übermittelte AWS Lambda die Bandbreitenoptionen zurück an die Anwendung. Amazon Kinesis Data Streams und AWS Lambda übernahmen die Bereitstellung und Verwaltung der Server, sodass sich das Unternehmen InternetProvider stärker auf die Entwicklung von Geschäftsanwendungen konzentrieren konnte.