Fermer

mai 20, 2018

Event Cloud Service. Bonjour le monde


Au début, j'ai écrit un blog sur Oracle Reference Architecture et le concept de Schema on Read et Schema on Write . Schema on Read convient parfaitement à Data Lake, qui peut ingérer des données telles quelles, sans aucune transformation et les conserver pendant une longue période.

Dans le même temps, vous avez deux types de données – Streaming Data et Batch. Batch peut être des fichiers journaux, des archives RDBMS. Les données de streaming peuvent être IoT, Sensors, les journaux de réplication Golden Gate.

Apache Kafka est un moteur très populaire pour l'acquisition de données en continu. Il présente de multiples avantages, tels que l'évolutivité, la tolérance aux pannes et le haut débit. Malheureusement, Kafka est difficile à gérer. Heureusement, Cloud simplifie de nombreuses opérations de routine. Oracle dispose de trois options pour déployer Kafka dans le Cloud:

1) Utilisez Big Data Cloud Service où vous obtenez le cluster Cloudera complet et où vous pouvez déployer Apache Kafka dans CDH.

2 ) Service de nuage de concentrateur d'événements dédié . Ici, vous devez spécifier des formes de serveur et d'autres paramètres, mais le reste est fait par le Cloud automagiquement.

3) Service de nuage de concentrateur d'événements . Ce service est entièrement géré par Oracle, vous n'avez même pas besoin de spécifier de formes de calcul. Une seule chose à faire est de dire combien de temps vous avez besoin de stocker des données dans cette rubrique et dire combien de partitions avez-vous besoin (partitions = performance).

Aujourd'hui, je vais vous parler de la dernière option, qui est un service cloud entièrement géré.

Il est vraiment facile de le provisionner, il suffit de vous connecter à votre compte Cloud et de choisir le service Cloud "Event Hub".

et choisissez console de service ouvert:

Ensuite, cliquez sur "Créer un service":

Mettez quelques paramètres – deux clé est Période de rétention et Nombre de partitions. Définit d'abord la durée pendant laquelle vous stockez les messages, puis définit les performances pour les opérations de lecture et d'écriture.

Cliquez sur après:

Confirmez et attendez un peu. quelques minutes):

après un court moment, vous pourrez voir le service provisionné:

Bonjour le monde.

Aujourd'hui je veux montrer "Bonjour tout le monde". Comment produire (écrire) et consommer (lire) un message à partir du service Cloud Event Hub

Le flux est (étape par étape):

1) Obtenir le jeton OAuth

2) Produire un message sur un sujet [19659002] 3) Créer un groupe de consommateurs

4) S'abonner au sujet

5) Consommer un message

Je vais maintenant le montrer dans certains détails.

OAuth and Authentication token (Step 1)

Pour faire face à Event Hub Cloud Service, vous devez vous familiariser avec le concept OAuth et OpenID. Si vous n'êtes pas familier, vous pouvez regarder la courte vidéo ou suivre ce tutoriel pas à pas .

En deux mots OAuth autorisation token (indique ce que j'ai pu accéder) méthode pour restreindre l'accès à certaines ressources.

L'une des idées principales est de découpler les utilisations (réelles – Propriétaire de la ressource) et application (client). L'homme réel connaît le login et le mot de passe, mais Client (Application) ne l'utilisera pas à chaque fois qu'il est nécessaire d'accéder au serveur de ressources (qui contient des informations ou du contenu). Au lieu de cela, l'application recevra une fois un jeton d'autorisation et l'utilisera pour travailler avec Resource Server. Ceci est bref, ici vous pouvez trouver une explication plus détaillée de ce qu'est OAuth.

Obtenir un jeton pour le client du service Cloud du concentrateur d'événements. ]

Comme vous pouvez le comprendre pour obtenir l'accès au serveur de ressources (lu comme messages du concentrateur d'événements), vous devez obtenir le jeton d'autorisation du serveur d'autorisation (lu comme IDCS). Ici, je voudrais montrer étape par étape comment obtenir ce jeton. Je vais commencer à la fin et montrera la commande (appel REST), que vous devez exécuter pour obtenir le jeton:

#! / Bin / bash
curl -k -X POST -u "$ CLIENT_ID: $ CLIENT_SECRET"
-d "grant_type = mot de passe et nom d'utilisateur = $ THEUSERNAME & mot de passe = $ THEPASSWORD & scope = $ THESCOPE"
"$ IDCS_URL / oauth2 / v1 / jeton"
-o access_token.json

Comme vous pouvez le constater, de nombreux paramètres sont requis pour obtenir le jeton OAuth.

Laissons-y un oeil. Allez au service et cliquez sur le sujet que vous voulez travailler, là vous trouverez l'application IDCS, cliquez dessus:

Après un clic dessus, vous serez redirigé vers la page d'application IDCS. La plupart des informations d'identification que vous pourriez trouver ici. Cliquez sur Configuration:

Sur cette page tout de suite vous trouverez ClientID et Client Secret (pensez-y comme login et mot de passe):

regardez vers le bas et trouvez le point, appelé Ressources:

Cliquez dessus

et vous trouverez deux autres variables, dont vous avez besoin pour le jeton OAuth – Scope et Audience primaire.

Un autre paramètre requis – IDCS_URL, vous pouvez trouver dans votre navigateur:

vous avez presque tout ce dont vous avez besoin, sauf login et mot de passe. Ici implique login et mot de passe cloud Oracle (ce que vous utilisez lors de la connexion dans http://myservices.us.oraclecloud.com):

Maintenant vous avez tous les informations d'identification requises et vous êtes prêt à écrire un script, qui va automatiser tout ça:

#! / bin / bash
export CLIENT_ID = 7EA06D3A99D944A5ADCE6C64CCF5C2AC_APPID
export CLIENT_SECRET = 0380f967-98d4-45e9-8f9a-45100f4638b2
exportation THEUSERNAME = john.dunbar
export LEPASSWORD = MyPassword
exportation CHAMP D'APPLICATION = / idcs-1d6cc7dae45b40a1b9ef42c7608b9afe-oehtest
exportation PRIMARY_AUDIENCE = https://7EA06D3A99D944A5ADCE6C64CCF5C2AC.uscom-central-1.oraclecloud.com:443
export THESCOPE = $ PRIMARY_AUDIENCE $ SCOPE
exportation IDCS_URL = https://idcs-1d6cc7dae45b40a1b9ef42c7608b9afe.identity.oraclecloud.com
curl -k -X POST -u "$ CLIENT_ID: $ CLIENT_SECRET"
-d "grant_type = mot de passe et nom d'utilisateur = $ THEUSERNAME & mot de passe = $ THEPASSWORD & scope = $ THESCOPE"
"$ IDCS_URL / oauth2 / v1 / jeton"
-o access_token.json

après l'exécution de ce script, vous aurez un nouveau fichier appelé access_token.json. Accès au champ_token c'est ce dont vous avez besoin:

$ cat access_token.json
{ "access_token" : "eyJ4NXQjUzI1NiI6InVUMy1YczRNZVZUZFhGbXFQX19GMFJsYmtoQjdCbXJBc3FtV2V4U2NQM3MiLCJ4NXQiOiJhQ25HQUpFSFdZdU9tQWhUMWR1dmFBVmpmd0UiLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJ1c2VyX3R6IjoiQW1lcmljYVwvQ2hpY2FnbyIsInN1YiI6ImpvaG4uZHVuYmFyIiwidXNlcl9sb2NhbGUiOiJlbiIsInVzZXJfZGlzcGxheW5hbWUiOiJKb2huIER1bmJhciIsInVzZXIudGVuYW50Lm5hbWUiOiJpZGNzLTFkNmNjN2RhZTQ1YjQwYTFiOWVmNDJjNzYwOGI5YWZlIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwidXNlcl90ZW5hbnRuYW1lIjoiaWRjcy0xZDZjYzdkYWU0NWI0MGExYjllZjQyYzc2MDhiOWFmZSIsImNsaWVudF9pZCI6IjdFQTA2RDNBOTlEOTQ0QTVBRENFNkM2NENDRjVDMkFDX0FQUElEIiwiYXVkIjpbInVybjpvcGM6bGJhYXM6bG9naWNhbGd1aWQ9N0VBMDZEM0E5OUQ5NDRBNUFEQ0U2QzY0Q0NGNUMyQUMiLCJodHRwczpcL1wvN0VBMDZEM0E5OUQ5NDRBNUFEQ0U2QzY0Q0NGNUMyQUMudXNjb20tY2VudHJhbC0xLm9yYWNsZWNsb3VkLmNvbTo0NDMiXSwidXNlcl9pZCI6IjM1Yzk2YWUyNTZjOTRhNTQ5ZWU0NWUyMDJjZThlY2IxIiwic3ViX3R5cGUiOiJ1c2VyIiwic2N vcGUiOiJcL2lkY3MtMWQ2Y2M3ZGFlNDViNDBhMWI5ZWY0MmM3NjA4YjlhZmUtb2VodGVzdCIsImNsaWVudF90ZW5hbnRuYW1lIjoiaWRjcy0xZDZjYzdkYWU0NWI0MGExYjllZjQyYzc2MDhiOWFmZSIsInVzZXJfbGFuZyI6ImVuIiwiZXhwIjoxNTI3Mjk5NjUyLCJpYXQiOjE1MjY2OTQ4NTIsImNsaWVudF9ndWlkIjoiZGVjN2E4ZGRhM2I4NDA1MDgzMjE4NWQ1MzZkNDdjYTAiLCJjbGllbnRfbmFtZSI6Ik9FSENTX29laHRlc3QiLCJ0ZW5hbnQiOiJpZGNzLTFkNmNjN2RhZTQ1YjQwYTFiOWVmNDJjNzYwOGI5YWZlIiwianRpIjoiMDkwYWI4ZGYtNjA0NC00OWRlLWFjMTEtOGE5ODIzYTEyNjI5In0.aNDRIM5Gv_fx8EZ54u4AXVNG9B_F8MuyXjQR-vdyHDyRFxTefwlR3gRsnpf0GwHPSJfZb56wEwOVLraRXz1vPHc7Gzk97tdYZ-Mrv7NjoLoxqQj-uGxwAvU3m8_T3ilHthvQ4t9tXPB5o7xPII-bowa-CF4QC8480ThrBwbl1emTDtEpR9-4z4mm1Ps-rJ9L3BItGXWzNZ6PiNdVbuxCQaboWMQXJM9bSgTmWbAYURwqoyeD9gMw2JkwgNMSmljRnJ_yGRv5KAsaRguqyV-x-lyE9PyW9SiG4rM47t-LY-okMxzchDm8nco84J5XlpKp98kMcg65Ql5Y3TVYGNhTEg "" token_type ": " Bearer " "expires_in" : 604800 }

Créer une variable Linux pour cela:

#! / Bin / bash
export TOKEN = ` cat access_token.json | jq .access_token | sed & Sys "// g & # 039;`

Eh bien, nous avons maintenant un jeton d'autorisation et peut fonctionner avec notre serveur de ressources (Event Cloud Service).

Note: vous pouvez également consulter la documentation sur la façon d'obtenir le jeton OAuth

Produire des messages (écrire des données) avec Kafka (Étape 2)

La première chose ce que nous pouvons vouloir faire est de produire des messages (écrire des données dans un cluster Kafka). Pour faciliter les scripts, il est également préférable d'utiliser certaines variables d'environnement pour les ressources communes. Pour cet exemple, je recommande de paramétrer le point final du sujet, le nom de la rubrique, le type de contenu à accepter et le type de contenu. Le type de contenu dépend entièrement du développeur, mais vous devez consommer (lire) le même format que celui que vous avez produit (écrire). Le paramètre clé à définir est le point de terminaison REST. Allez à PSM, cliquez sur le nom du sujet et copiez tout jusqu'à "restproxy":

Aussi, vous aurez besoin du nom du sujet, que vous pourriez prendre dans la même fenêtre:

[19659002] maintenant nous pourrions écrire un script simple pour produire un message à Kafka:

#! / bin / bash
export OEHCS_ENDPOINT = https: //oehtest-gse00014957.uscom-central -1.oraclecloud.com:443/restproxy
export TOPIC_NAME = idcs-1d6cc7dae45b40a1b9ef42c7608b9afe-oehtest
export CONTENT_TYPE = application / vnd.kafka.json.v2 + json
curl -X POST
-H "Autorisation: porteur $ JETON"
-H "Content-Type: $ CONTENT_TYPE"
–data & # 039; {"enregistrements": [{« value »:{« foo »: »bar »}}]} &
$ OEHCS_ENDPOINT / topics / $ TOPIC_NAME

Si tout va bien, la console Linux retournera quelque chose comme:

{ "offsets" : [{ "partition" : 1, "décalage" : 8, "code d'erreur" : null, "erreur" : null }] "id_clé_de_clé" : null, "valeur_schema_id" : null }

Créer un groupe de consommateurs (Étape 3)

La première étape pour lire des données à partir de OEHCS est de créer un groupe de consommateurs. Nous réutiliserons les variables d'environnement de l'étape précédente, mais juste au cas où I & # 039; ll l'inclurait dans ce script:

#! / Bin / bash
export OEHCS_ENDPOINT = https: //oehtest-gse00014957.uscom-central-1.oraclecloud.com:443/restproxy
export CONTENT_TYPE = application / vnd.kafka.json.v2 + json
export TOPIC_NAME = idcs-1d6cc7dae45b40a1b9ef42c7608b9afe-oehtest
curl -X POST
-H "Autorisation: porteur $ JETON"
-H "Content-Type: $ CONTENT_TYPE"
–data & # 039; {"format": "json", "auto.offset.reset": "le plus ancien"} & # 039;
$ OEHCS_ENDPOINT / consumers / oehcs-groupe de consommateurs
-o consumer_group.json

ce script va générer un fichier de sortie, qui contiendra des variables, que nous aurons besoin de consommer des messages

S'abonner à un sujet (Step 4)

Vous êtes maintenant prêt à vous abonner cette rubrique (exporter la variable d'environnement si vous ne l'avez pas fait auparavant):

#! / bin / bash
export BASE_URI = ` cat consumer_group.json | jq .base_uri | sed & lt; s / "// g & # 039;`
exportation TOPIC_NAME = idcs-1d6cc7dae45b40a1b9ef42c7608b9afe-oehtest
curl -X POST
-H "Autorisation: porteur $ JETON"
-H "Content-Type: $ CONTENT_TYPE"
-d "{" topics ": [« $TOPIC_NAME »]}"
$ BASE_URI / abonnement

Si tout va bien, cette requête ne retournera rien.

Consommer des messages (Lire) (Étape 5)

Enfin, nous nous approchons de la dernière étape – consommer des messages.

et encore une fois, sa requête curl assez simple:

#! / bin / bash
export BASE_URI = ` cat consumer_group.json | jq .base_uri | sed & # 039; s / " // g & # 039; `
exportation H_ACCEPT = application / vnd.kafka.json.v2 + json
curl -X GET
-H "Autorisation: porteur $ JETON"
-H "Accepter: $ H_ACCEPT"
$ BASE_URI / enregistrements

si tout fonctionne, comme il est censé fonctionner, vous aurez comme sortie:

[{ "sujet" : "idcs-1d6cc7dae45b40a1b9ef42c7608b9afe-oehtest" ] "clé" : null, "valeur" : { "foo" : "barre" } ] "partition" : 1, "décalage" : 17 }]

Conclusion

Aujourd'hui, nous avons vu combien il était facile de créer un Kafka Topic entièrement géré dans Event Hub Cloud Service et nous avons également fait un premier pas dans ce domaine: écrire et lire un message. Kafka est un moteur de bus de messages très populaire, mais il est difficile à gérer. Le cloud simplifie cela et permet aux clients de se concentrer sur le développement de leurs applications.

Ici, je veux aussi donner quelques liens utiles:

1) Si vous n'êtes pas familier avec l'API REST, je vous recommande d'y aller à travers ce blog

2) Il y a outil en ligne qui aide à valider vos demandes de boucle

3) Ici vous pouvez trouver quelques exemples utiles de produire et de consommer des messages

4) Si vous n'êtes pas familier avec OAuth, voici un joli tutoriel qui montre un exemple de bout en bout




Source link