Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
AVRO-Nachrichten mit Oracle Cloud Infrastructure Streaming und OCI Data Flow mit Micro-Batch-Verarbeitung streamen
Einführung
In der heutigen datengesteuerten Landschaft ist die Möglichkeit, Echtzeit-Datenstreams zu verarbeiten und zu analysieren, von entscheidender Bedeutung für Unternehmen, die Erkenntnisse gewinnen und schnell auf sich ändernde Bedingungen reagieren möchten. Streaming-Datenverarbeitungstechnologien haben sich als leistungsstarke Lösungen für die Verarbeitung von Datenstreams mit hohem Volumen etabliert. In diesem Tutorial wird ein innovativer Ansatz für die effiziente Streamung von AVRO-Nachrichten mit Oracle Cloud Infrastructure-(OCI-)Streaming in Kombination mit der Micro-Batch-Verarbeitungstechnik vorgestellt und mit den serverlosen Funktionen von Oracle Functions basierend auf dem Open-Source-FN-Projekt erweitert.
Einführung in AVRO und Streamingdaten
AVRO, ein weit verbreitetes Datenserialisierungsformat, ist bekannt für seine Effizienz bei der Darstellung komplexer Datenstrukturen und deren Kompatibilität mit verschiedenen Programmiersprachen. Durch die Integration mit Streaming-Technologien können Unternehmen Daten nahezu in Echtzeit übertragen und verarbeiten. So können sie wertvolle Erkenntnisse ohne die Latenz extrahieren, die in der Regel mit der Batchverarbeitung verbunden ist.
OCI Streaming: Daten in Echtzeit unterstützen
Oracle Cloud Infrastructure (OCI) verfügt über eine Reihe von Tools für die Verarbeitung von Daten in der Cloud. OCI Streaming ist ein solcher Service, der auf Echtzeitdatenstreams mit hohem Durchsatz zugeschnitten ist. Durch die Nutzung von OCI Streaming können Entwickler skalierbare und zuverlässige Datenpipelines erstellen, die Datenstreams effizient erfassen, verarbeiten und verteilen.
Von OCI Data Flow verwaltetes Spark: Keine Lock-In-Lösung
Oracle Cloud Infrastructure (OCI) Data Flow ist ein vollständig verwalteter Apache Spark-Service, der Verarbeitungsaufgaben für extrem große Datasets ohne Infrastruktur zum Bereitstellen oder Verwalten ausführt.
Bei der Micro-Batch-Verarbeitung werden eingehende Datenstreams mithilfe von Zeit oder Größe als Kriterien in kompakte Batches aufgeteilt. Diese Batches werden dann als kleinere Jobs verarbeitet. Im Gegensatz zur konstanten und individuellen Verarbeitung von Datensätzen bei der Stream-Verarbeitung führt die Micro-Batch-Verarbeitung vor der Verarbeitung ein wenig Verzögerung und Speicherung ein, was eine bessere Kontrolle darüber ermöglicht, was mit den Daten zu tun ist. Im Gegensatz zur herkömmlichen Batch-Verarbeitung, bei der Big Data Sets in Intervallen verarbeitet werden, bietet die Micro-Batch-Verarbeitung nahezu Echtzeit-Verarbeitung und -Bereitstellung von Ergebnissen.
Synergie freigeben: OCI Streaming, OCI Data Flow und Oracle Functions
Dieses Tutorial beschreibt die Fusion von OCI Streaming, von OCI Data Flow verwaltetem Spark Streaming und Oracle Functions. Wir führen Sie durch den Prozess der Einrichtung einer End-to-End-Streaming-Datenpipeline, die AVRO-codierte Nachrichten aufnimmt, sie mit von OCI Data Flow verwalteten Spark-Mikrobatchverarbeitungsfunktionen effizient verarbeitet und serverlose ereignisgesteuerte Verarbeitung mit Oracle Functions einführt.
Zielsetzung
Verwenden Sie die von OCI Streaming und OCI Data Flow verwaltete Spark-Micro-Batch-Verarbeitung, um eine effiziente Echtzeit-Datenverarbeitungspipeline im AVRO-Format zu erstellen.
Wichtig: Dieses Tutorial dient ausschließlich zu Schulungs- und Studienzwecken. Es bietet eine Umgebung, in der Lerner experimentieren und praktische Erfahrungen in einer kontrollierten Umgebung sammeln können. Beachten Sie, dass die in dieser Übung verwendeten Sicherheitskonfigurationen und -praktiken möglicherweise nicht für reale Szenarios geeignet sind.
Sicherheitsbetrachtungen für echte Anwendungen sind oft viel komplexer und dynamischer. Daher ist es wichtig, vor der Implementierung einer der hier in einer Produktionsumgebung aufgezeigten Techniken oder Konfigurationen eine umfassende Sicherheitsbewertung und -überprüfung durchzuführen. Diese Überprüfung sollte alle Aspekte der Sicherheit umfassen, einschließlich Zugriffskontrolle, Verschlüsselung, Überwachung und Compliance, um sicherzustellen, dass das System den Sicherheitsrichtlinien und -standards der Organisation entspricht.
Beim Übergang von einer Übungsumgebung zu einem realen Deployment sollte die Sicherheit immer eine oberste Priorität sein.
Prozessfluss
Allgemeine Architektur
Voraussetzungen - Oracle Cloud Infrastructure
- Oracle-Account mit Zugriffsberechtigungen auf Admin-Ebene
- Ein Compartment zum Erstellen Ihrer Ressourcen: Beachten Sie die COMPARMENT-ID
- VCN mit zwei Subnetzen (privat und öffentlich) finden Sie unter Network-Tutorial erstellen
- Stellen Sie sicher, dass die Subnetze die richtigen Ingress-Regeln für Servicegateway und die Ports 443 & 80 für private und öffentliche Subnetze haben.
Voraussetzungen - Lokale Rechnerumgebung
-
Eine Oracle Linux-Compute-Instanz im Subnetz PRIVATE. Dies ist für den Zugriff auf Ressourcen im Subnetz PRIVATE wichtig, wie OCI Streaming-, Functions- und Containerinstanzen, die in diesem Tutorial bereitgestellt werden.
-
Ein Bastionhost für die Verbindung zur Oracle Linux-Compute-Instanz und die Ausführung von Aufgaben für das Tutorial. Weitere Informationen finden Sie unter Bastion - Überblick.
-
Lokales OCI-CLI-Setup. Weitere Details finden Sie unter CLI-Tutorial installieren.
-
Lokaler DOCKER zum Erstellen von Images, wenn Sie Oracle Linux verwenden, finden Sie weitere Informationen unter Docker auf Oracle Linux installieren.
-
Lokale Python-Version 3.9.16 (mindestens) zum Testen installiert
-
Lokales Java JDK 11.0.8
-
Lokales Maven 3.5.4
-
Lokale FN CLI, um Ihre Funktion in OCI bereitstellen zu können: FN-CLI installieren
Aufgabe 1: Dynamische Gruppen einrichten
-
Gehen Sie zu Ihrer Domain, klicken Sie auf Dynamische Gruppen, und erstellen Sie die folgenden Gruppen.
Gruppenname: MyFunctions
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentID'}
Gruppenname: ContainerIntances
ALL {resource.type='compute-container-instances', resource.compartment.id = 'pasteYourCompartmentID'}
Gruppenname: DataFlowDynamicGroup
ALL {resource.type='dataflowrun', resource.compartment.id = 'pasteYourCompartmentID'}
Aufgabe 2: Policys erstellen
-
Gehen Sie zu Policys, und erstellen Sie die folgenden Policys.
Policy-Name: FunctionsPolicies
Allow dynamic-group MyFunctions to manage objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group ContainerIntances to manage objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read secret-bundles in compartment YOUR-COMPARTMENT-NAME
Policy-Name: StreamTopicPolicies
Allow dynamic-group ContainerIntances to read objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group ContainerIntances use stream-push in compartment YOUR-COMPARTMENT-NAME
Policy-Name: ContainerInstancesPolicy
Allow dynamic-group ContainerIntances to read repos in compartment YOUR-COMPARTMENT-NAME
Policy-Name: DataFlowPolicies
Allow dynamic-group DataFlowDynamicGroup to manage objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group DataFlowDynamicGroup to {STREAM_INSPECT, STREAM_READ, STREAM_CONSUME} in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group DataFlowDynamicGroup to manage data-catalog-metastores in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group DataFlowDynamicGroup to manage object-family in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group DataFlowDynamicGroup to read secret-bundles in compartment YOUR-COMPARTMENT-NAME Allow service dataflow to read objects in compartment YOUR-COMPARTMENT-NAME
Aufgabe 3: Speicher-Buckets erstellen und AVRO-Schema hochladen
-
Gehen Sie zu Buckets, klicken Sie auf Bucket erstellen, und erstellen Sie einen neuen Bucket mit dem Namen AVRO-schema-bucket, um die AVRO-Schemadatei zu speichern.
-
Wählen Sie jetzt Ihren Bucket aus, und wiederholen Sie den HINWEIS des Namespace. Er wird später benötigt.
-
Laden Sie die Datei user.asvc in diesen erstellten Bucket hoch.
Aufgabe 4: Privates OCI-Streaming-Thema erstellen
-
Gehen Sie zu Analysen und KI, klicken Sie auf Streaming, und erstellen Sie einen neuen Stream namens FrontDoorTopic.
-
Wählen Sie Streampools aus, klicken Sie auf PrivatePool, und klicken Sie dann auf die Option Kafka-Verbindungseinstellungen, und HINWEIS abrufen der Felder wird später benötigt.
Aufgabe 5: AUTH TOKEN erstellen
AUTH TOKEN für Ihren Benutzer erstellen. Dies ist erforderlich, um mit dem Kafka-Thema zu arbeiten
-
Klicken Sie am oberen rechten Benutzersymbol, und wählen Sie dann die Option Benutzereinstellungen.
-
Klicken Sie auf Authentifizierungstoken, und generieren Sie ein neues Token und HINWEIS abrufen des Tokens.
Aufgabe 6: Container-Registry erstellen
-
Gehen Sie zum Menü Entwicklerservices, klicken Sie auf Container-Registry, und erstellen Sie die folgenden privaten Repositorys.
Repository-Name Typ api-avro-sample_a Privat api-avro-sample_b Privat fn-recep-avro Privat -
Prüfen Sie die Repositorys und TAKE NOTE des Namespace.
-
Öffnen Sie die Terminalshell, in der OCI CLI und Docker installiert sind, und fahren Sie mit der Anmeldung in der Registry fort. Prüfen Sie, welche URL für Ihre REGION korrekt ist. In diesem Tutorial verwenden wir Brazil East (Sao Paulo), wo die Registry-URL gru.ocir.io lautet.
docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Aufgabe 7: OCI Vault erstellen
Erstellen Sie den OCI Vault, und geben Sie die erforderlichen Variablen an, die später in diesem Tutorial verwendet werden.
-
Gehen Sie zu Identifizieren und Sicherheit, klicken Sie auf Vault und dann auf Vault erstellen.
-
Wählen Sie den neuen Vault aus, und erstellen Sie Masterverschlüsselungsschlüssel dafür.
-
Erstellen Sie ein neues Secret mit dem Namen AUTH_KEY, und fügen Sie den zuvor erstellten Authentifizierungsschlüssel ein.
-
Wiederholen Sie den Secret-Erstellungsprozess, und erstellen Sie die folgenden neuen Secrets:
Variablenname Wert KAFKA_BOOTSTRAPSERVER "Der Boostrap-Server aus Ihrer OCI Streaming-Konfiguration" KAFKA_TOPIC “FrontDoorTopic” KAFKA_USERNAME "Ihr Benutzername + Streampool-ID aus Ihrer OCI Streaming-Konfiguration" AUTH_KEY "Ihr AUTH-Token, das Sie in früheren Schritten erstellt haben" -
Notieren Sie sich die Secret-OCID, die für jedes Secret erstellt wurde, und erstellen Sie eine neue Konfigurationsdatei.
-
Die Datei config.properties enthält die Zuordnungsvariablen von der Anwendung zu den Vault-Secrets-OCIDs. Die Anwendung verwendet diese Datei, um zu identifizieren, welche Vault Secrets während der Laufzeit erfasst werden müssen.
-
Erstellen Sie eine neue Datei auf Ihrem lokalen Rechner, auf dem Sie Zugriff auf OCI-CLI haben:
Ersetzen Sie Ihre OCID für jeden Secreat-Dateinamen
: config.propertieskafka_bootstrapserver_vaultOCID=ocid1.vaultsecret.REPLACE-WITH-YOURS kafka_topic_vaultOCID=ocid1.vaultsecret.REPLACE-WITH-YOURSxxxxxx kafka_username_vaultOCID=ocid1.vaultsecret.REPLACE-WITH-YOURS auth_token_vaultOCID=ocid1.vaultsecret.oc1.REPLACE-WITH-YOURS
-
-
Gehen Sie zu Buckets, klicken Sie auf Bucket erstellen, und erstellen Sie einen neuen Bucket mit dem Namen config, um die Datei
config.properties
zu speichern. -
Laden Sie die Datei config.properties in den Speicher-Bucket config hoch
ls -lrt config.properties oci os object put -bn config --file config.properties --force
Aufgabe 8: Erstellen Sie eine einfache AVRO-Nachricht, und speichern Sie sie mit dem bereitgestellten python-Beispielcode in einer Datei
-
Öffnen Sie das Shell-Terminal, in dem OCI CLI, Docker und Python3 installiert sind, und erstellen Sie eine neue AVRO-Datei mit einer einzelnen Nachricht, die auf dem gleichen AVRO-Schema basiert, das wir zuvor in Object Storage hochgeladen haben.
Hinweis: Sie müssen die Python-Version prüfen, Python 3.9.16 in diesem Tutorial verwenden, frühere Versionen funktionieren möglicherweise nicht.
-
Hier erhalten Sie den Code Create_avro_sample.zip.
-
Dekomprimieren Sie es an den von Ihnen ausgewählten Ort, und führen Sie das Programm aus, um eine AVRO-Beispielnachricht zu generieren:
cd ~ mkdir create_avro_sample cd create_avro_sample unzip CreateAVRO_SampleFile.zip # Check the files are there ls -lrt # install the python dependencies on requirements.txt pip3 install -r requirements.txt # Run the program and create an AVRO message file python3 create_avro_sample.py meu_file.bin '{"id":10029,"name":"John","email":"john@bla.com"}'
Aufgabe 9: OCI-Funktion für den Empfang der AVRO-Nachricht und die Veröffentlichung im OCI Streaming-Thema erstellen
-
Gehen Sie zu Entwicklerservices, klicken Sie unter Functions auf Anwendungen und dann auf Anwendung erstellen.
-
Gehen Sie zu der Terminalshell, in der Docker, OCI CLI und FN CLI installiert sind, und führen Sie die folgenden Befehle aus, um die Funktion zu initialisieren.
Hinweis: Wenn Sie die Schritte ausgeführt haben, wurde der Docker-Anmeldebefehl bereits ausgeführt. Wenn nicht, fahren Sie mit dem Docker-Anmeldeschritt in der Aufgabe Container-Registry erstellen fort.
fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE
Hinweis: In diesem Tutorial wird die Region Brazil East(Sao Paulo) verwendet. Wenn Sie eine andere Region verwenden, müssen Sie die Speicherorte api-url und registry ändern.
-
Erstellen Sie eine einfache Hello-world-Funktion, um sicherzustellen, dass alle Einstellungen korrekt sind.
fn init --runtime python fn-recep-avro cd fn-recep-avro fn deploy --app MyReceptionApp fn invoke MyReceptionApp fn-recep-avro
-
Rufen Sie den Beispielcode der AVRO-Funktion in der Datei fn-recep-AVRO.zip ab, und ersetzen Sie den hello-world-Code, den wir zuvor erstellt haben. Sie müssen die Dateien func.py und requirements.txt abrufen, damit Sie arbeiten können.
# Check you have the right code for func.py & requirements.txt (you got from zip file) ls -lrt
-
Neuen Code erstellen und Funktion bereitstellen
fn deploy --app MyReceptionApp
-
Um die Funktion aufzurufen, müssen wir eine AVRO-Nachricht als Parameter übergeben. Dazu verwenden wir die erstellte AVRO-Beispielnachrichtendatei aus den vorherigen Schritten. Beim ersten Aufruf einer Funktion dauert es etwas länger, da sie gestartet werden muss.
# Check where you created the sample avro message file ls -lrt ../create_avro_sample/ # Invoke the function to check if it's working as expected echo -n -e "$(cat ../create_avro_sample/meu_file.bin)" | fn invoke MyReceptionApp fn-recep-avro
Aufgabe 10: API-Gateway zur Anzeige der Funktion erstellen
-
Klicken Sie in der Konsole auf Entwicklerservices, dann unter API-Management auf Gateways, Gateway erstellen.
-
Klicken Sie nach der Erstellung auf die Option Deployments, und klicken Sie dann auf Deployment erstellen.
Name: RecepFunction
Pfadpräfix: /- Wählen Sie unter "Authentifizierung" die Option Keine Authentifizierung, da dies eine einfache Übung ist und keine API-Authentifizierung implementiert ist. Das Hauptziel ist hier, einen HTTPS-Aufruf zu demonstrieren, der eine binäre AVRO-Nachricht über eine API übergibt. Im Rahmen dieser Übung implementieren wir keine Authentifizierungsmethode für diese einfache Übung.
- Bevor Sie zu einer echten Lebensumgebung wechseln, befolgen Sie die Best Practices für die Sicherheit von API Gateway.
- Weitere Details finden Sie unter API-Gateways und -Ressourcen sichern.
Route 1: Pfad: /
Methos: POST
Backend-Typ: Oracle-Funktionen
Anwendung: Wählen Sie Ihre Funktion aus -
Prüfen Sie den API-Gateway-Endpunkt, und notieren Sie sich.
-
Öffnen Sie das Linux-Shell-Terminal, und rufen Sie das API-Gateway auf. Ersetzen Sie die API-URL durch den richtigen Endpunkt, den Sie im vorherigen Schritt erhalten haben.
cd create_avro_sample/ ls -lrt curl -X POST -H "Content-Type: application/octet-stream" \ -d "$(echo -n -e "$(cat meu_file.bin)")" \ https://xxxxxxxxxxxxx.apigateway.sa-saopaulo-1.oci.customer-oci.com/
Checkpoint
Aufgabe 11: Containerimage für API-Typ A erstellen
Hinweis: Der API-Typ A und B-Code ist im Wesentlichen mit nur einer anderen Headernachricht identisch, um zwei verschiedene APIs zu simulieren.
-
Rufen Sie den Code aus dem API-Typ A ab, und dekomprimieren Sie ihn in Ihrem Linux-Shell-Terminal api-avro-sample_a.zip.
-
Rufen Sie den Namespace der Container-Registry ab, den Sie in den vorherigen Schritten erhalten haben, und erstellen Sie den Speicherort der Anwendungs-Registry entsprechend dem folgenden Muster. Die ocir url basiert auf Ihrer Region, d.h. gru.ocir.io für Brasil East(SaoPaulo)
[ocir url]/[Ihr Namespace]/api-avro-sample_a:neueste
-
Erstellen und übergeben Sie in Ihrem Linux-Shell-Terminal das Docker-Image für diese API.
ls -lrt docker build . -t gru.ocir.io/yournamespace/api-avro-sample_a:latest docker push gru.ocir.io/yournamespace/api-avro-sample_a:latest
Aufgabe 12: Containerimage für API-Typ B erstellen
-
Rufen Sie den Code aus dem API-Typ B ab, und dekomprimieren Sie ihn in Ihrem Linux-Shell-Terminal api-avro-sample_b.zip.
-
Rufen Sie den Namespace der Container-Registry ab, den Sie in den vorherigen Schritten erhalten haben, und erstellen Sie den Speicherort der Anwendungs-Registry entsprechend dem folgenden Muster. Die ocir url basiert auf Ihrer Region, d.h. gru.ocir.io für Brasil East(SaoPaulo)
[ocir url]/[Ihr Namespace]/api-avro-sample_b:neueste
-
Erstellen und übergeben Sie in Ihrem Linux-Shell-Terminal das Docker-Image für diese API.
ls -lrt docker build . -t gru.ocir.io/yournamespace/api-avro-sample_b:latest docker push gru.ocir.io/yournamespace/api-avro-sample_b:latest
-
Prüfen Sie auf der Container-Registry-Seite, ob das Image erfolgreich übertragen wurde.
Aufgabe 13: APIs im Containerservice bereitstellen
-
Gehen Sie zu Entwicklerservices und Containerinstanzen, und klicken Sie auf Containerinstanz erstellen.
-
Wiederholen Sie Schritt 1 für API-type-b, und wählen Sie das richtige Image für die TYPE B-API aus.
-
Gehen Sie zu Entwicklerservices, Containerinstanzen, und klicken Sie auf Containerinstanz erstellen, und wiederholen Sie die Schritte zum Deployment des API-Typs B.
-
Rufen Sie die interne FQDN-Adresse aus Ihren Containerinstanzen ab.
- Klicken Sie auf die Containerinstanz, und notieren Sie sich jede interne FQDN-Adresse.
-
Gehen Sie zu Identifizieren und Sicherheit, klicken Sie auf Vault, wählen Sie Ihren VAULT aus, und erstellen Sie zwei neue Secrets.
Secret-Name Wert API_TYPE_A_URL Private interne FQDN-Adresse für API-Typ A einfügen API_TYPE_B_URL Private interne FQDN-Adresse für API-Typ B einfügen Notieren Sie sich die einzelnen Secret-OCIDs.
Der Vault sollte wie folgt aussehen:
-
Bearbeiten Sie die Datei config.properties, die Sie in den config-Speicher-Bucket hochgeladen haben, und fügen Sie neue Einträge für die Secret-OCID hinzu
ls -lrt config.properties vi config.properties api_type_a_url_vaultOCID=paste_API_TYPE_A_URL_secretOCID api_type_b_url_vaultOCID=paste_API_TYPE_B_URL_secretOCID # After save, please upload the new version to Object Storage cat config.properties oci os object put -bn config --file config.properties --force
Ihre Datei sollte wie folgt aussehen:
-
Aufgabe 14: Testen Sie die APIs mit create_avro_sample.py
-
Gehen Sie zu Ihrem Linux-Shell-Terminal, in dem Sie create_avro_sample.py aus Aufgabe 7 gespeichert haben, und erstellen Sie neue Nachrichten zum Testen von API-Aufrufen. Wir erstellen zwei neue AVRO-Dateien mit unterschiedlichen IDs (1010 und 1020), die wir als Filter im Spark Stream (DataFlow)-Programm verwenden.
ls -lrt python3 create_avro_sample.py type_a_message.bin '{"id":1010,"name":"Paul that goes to API type A","email":"paul@bla.com"}' python3 create_avro_sample.py type_b_message.bin '{"id":1020,"name":"Mary that goes to API type B","email":"mary@bla.com"}'
-
Rufen Sie die APIs auf, die die zu testende AVRO-Nachricht übergeben. Gehen Sie zur Seite Containerinstanzen, und rufen Sie die interne FQDN-Adresse für jede der APIs api-type-a und api-type-b ab. Denken Sie daran, die folgende URL für die entsprechende interne FQDN-Adresse aus Ihren APIs zu ersetzen.
ls -lrt type* curl -i -X POST -H "Content-Type: application/octet-stream" \ --data-binary "@type_a_message.bin" \ xxx.xx.x.xxx curl -i -X POST -H "Content-Type: application/octet-stream" \ --data-binary "@type_b_message.bin" \ xxx.xxx.xx.xxx
Aufgabe 15: Java Spark-Streaminganwendung einrichten
-
Gehen Sie zu Buckets, klicken Sie auf Bucket erstellen, und erstellen Sie zwei neue Buckets namens dataflow-app-avro und dataflow-logs-avro. Damit wird die Java-Anwendung hochgeladen.
-
Prüfen Sie die java-Umgebungsversionen.
Java
java 11.0.8 2020-07-14 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)
Maven
Apache Maven 3.5.4 (Red Hat 3.5.4-5) Maven home: /usr/share/maven Java version: 11.0.20, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-3.0.1.el8.x86_64 Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "5.15.0-103.114.4.el8uek.x86_64", arch: "amd64", family: "unix"
-
Laden Sie den Beispielcode herunter, und dekomprimieren Sie ihn in Ihrer lokalen Umgebung mit oci-cli, docker, java und maven: spark-consume-avro-message.zip.
unzip spark-consume-avro-message.zip cd spark-consume-avro-message ls -lrt
Ein wenig Einblick in den Proxycode, um Containerinstanztypen A und B aufzurufen.
Prüfen Sie die Hauptprogrammdatei .src/main/java/example/Example.java....
-
Da dieses Java-Programm eine Library zur Verarbeitung der Funkenavro verwendet, müssen wir die Abhängigkeit verpacken, um sie an den Datenfluss zu übergeben. Dazu verwenden wir Data Flow Dependency Packager. Wenn Sie weitere Details benötigen, können Sie zu Data Flow Dependency Packager navigieren.
Das Package org.apache.spark:spark-avro_2.12:3.2.1 wurde bereits in der Datei packages.txt deklariert. Sie müssen es nur mit folgendem Befehl verpacken:
docker run --privileged --platform linux/amd64 --rm -v $(pwd):/opt/dataflow --pull always -it phx.ocir.io/oracle/dataflow/dependency-packager:latest -p 3.8
-
Laden Sie die Datei archive.zip mit der oci-cli in den Speicher-Bucket dataflow-app-avro hoch.
oci os object put -bn dataflow-app-avro --file archive.zip --force
-
Kompilieren, verpacken Sie die Java-Anwendung, und laden Sie sie in den Speicher-Bucket dataflow-app-avro hoch
ls -lrt mvn clean install
...reduzierte Anzahl Zeilen des Kompilierungslogs...# upload the JAR file to the storage bucket oci os object put -bn dataflow-app-avro --file target/consumekafka-1.0-SNAPSHOT.jar --force
-
Prüfen Sie den aktuellen dataflow-app-avro-Speicher-Bucket, und stellen Sie sicher, dass er wie folgt aussieht.
-
Gehen Sie zu Analysen und KI, klicken Sie unter Data Lake auf Data Flow, wählen Sie das linke Menü Private Endpunkte aus, und klicken Sie auf Privaten Endpunkt erstellen.
-
Der PRIVATE Endpunkt ist erforderlich, da wir das PRIVATE-Subnetz für die Containerinstanzen und den OCI Streaming Pool verwenden.
-
Stellen Sie sicher, dass Sie die DNS-Zonen mit dem internen FQDN aus den OCI-Containerinstanzen und dem OCI Streaming Pool durch Komma getrennt ausfüllen.
-
-
Gehen Sie zu Analysen und KI, und klicken Sie unter Data Lake auf Data Flow, Anwendung erstellen.
-
Wählen Sie nach der Erstellung den Datenfluss spark-lab-avro aus, und klicken Sie auf Ausführen, um das Programm zu starten. Es dauert in der Regel bis zu 8 Minuten.
-
-
Prüfen Sie die Anwendung "Running dataflow", und öffnen Sie SparkUI, um die aktuellen Jobs anzuzeigen, und die App arbeitet.
Aufgabe 16: Ablauf validieren
Rufen Sie die Funktion auf, und übergeben Sie eine Nachricht, um zu prüfen, ob der gesamte Ablauf wie erwartet funktioniert.
-
Öffnen Sie das Linux-Shell-Terminal, in dem Sie die Beispielnachrichten type_a_message.bin und type_b_message.bin erstellt haben, und senden Sie die Nachricht. Ersetzen Sie die API-URL durch den richtigen Endpunkt, den Sie beim Erstellen des API-Gateways erhalten haben.
cd create_avro_sample/ ls -lrt curl -X POST -H "Content-Type: application/octet-stream" \ -d "$(echo -n -e "$(cat type_a_message.bin)")" \ https://xxxxxxxxxxxxx.apigateway.sa-saopaulo-1.oci.customer-oci.com/
-
Prüfen Sie, ob der API-Typ A aufgerufen wurde, indem Sie die Logs in der Containerinstanz prüfen.
Sie können den Prozess wiederholen und eine type_b_message.bin-Datei senden. Dabei wird der Typ B-Containerinstanz aufgerufen.
Verwandte Links
Danksagungen
- Autor - Joao Tarla (Oracle LAD A-Team Solution Engineer)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Stream AVRO Messages with Oracle Cloud Infrastructure Streaming and OCI Data Flow with Micro-Batch processing
F86501-01
September 2023
Copyright © 2023, Oracle and/or its affiliates.