API-tietojen kuluttaminen Kafkaan

Vaiheittainen opas sisällön nauttimiseen HTTP-pyyntö tai REST-sovellusliittymän vastaus Kafkaan

(6. joulukuuta 2020)

Kuva: EJ Strat on Unsplash

Nykypäivän avoimen lähdekoodin ilmasto-olosuhteissa on tullut yleiseksi tietojen asettaminen helposti saataville sovellusliittymien kautta. Yritykset, kuten Spotify ja Twitter, paljastavat osan analysoitavista tiedoistaan ​​ REST-sovellusliittymän kautta. Tämä tekee tietojen hankinnasta HTTP-pyynnön tai REST-sovellusliittymän kautta yhä suositumman. Saadakseen nämä tiedot saataville tehokkaalla tietojen analysointialustalla käyttäjien on rakennettava jonkinlainen putki datan reitittämiseksi lähteestä haluttuun analyysialustaan. Apache Kafka on joustava ja tehokas tapa hankkia nämä tiedot.

Apache Kafka on avoimen lähdekoodin hajautettu tapahtumien suoratoistoalusta, jota käytetään korkeaan -suorituskykydataputket, suoratoistoanalytiikka, tietojen integrointi ja tehtäväkriittiset sovellukset.

Tämä muistikirja on läpikäynti julkaisemalla vastauksen sisältö HTTP-pyynnöstä tai REST-sovellusliittymästä Kafkalle. Oletetaan, että Kafka-palvelu on kehrätty telakointisäiliöön. Docker on alusta sovellusten kehittämiseen, toimittamiseen ja käyttämiseen. Voit lukea lisää telakointiasemasta täältä .

Vaihe 1: Lue REST API -vastauksen / HTTP-vastauksen sisältö JSON-tiedostoksi seuraavan komennon avulla.

Curl on komento tietojen hankkimiseksi tai lähettämiseksi URL-syntaksin avulla mitä tahansa mitä tahansa tuetuista protokollista. Jotkut tuetuista protokollista ovat HTTP, HTTPS, FTP, IMAP, POP3, SCP, SFTP, SMTP, TFTP, TELNET, LDAP tai FILE.

Lisätään vaihtoehdot:

  • -L (kelvollinen HTTP: lle ja HTTPS: lle), jotta curl voidaan tehdä uudestaan ​​pyynnöstä uudessa paikassa, jos palvelin ilmoittaa, että pyydetty sivu on siirtynyt eri sijaintiin (osoitettu Sijainti: otsake ja 3XX-vastaus) koodi). Kun todennusta käytetään, curl lähettää tunnistetiedot vain alkuperäiselle isännälle. Jos uudelleenohjaus vie käpristyksen toiseen isäntään, se ei voi siepata käyttäjän + salasanaa. Voit rajoittaa seurattavien uudelleenohjausten määrää käyttämällä – max-redirs -vaihtoehtoa.
  • -o Assessment-yrittää-nested.json kirjoittaa lähdön tähän tiedostoon stdoutin sijaan
  • Sitten annoimme https://goo.gl/ME6hjp , URL-osoitteen, josta haluamme saada tietoja.
curl -L -o assessment-attempts-nested.json 
https://goo.gl/ME6hjp

Tulos näyttää tältä:

\% Total \% Received \% Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0100 9096k 100 9096k 0 0 14.6M 0 --:--:-- --:--:-- --:--:-- 14.6M

Vaihe 2 : Käytä jq muokata tapaa, jolla luemme JSON-tiedostosta, jonka käytimme käpristymälähdöllä vaiheessa 1, ja testaa sitä kissan kanssa.

Kissa komento ketjuttaa tiedostot ja tulostaa vakiotulosteeseen.

Tarjoamme niiden tiedostojen nimet, jotka haluamme ketjuttaa, tai vakiosyötteen vakiotulosteeseen. Ilman FILE-tiedostoa tai kun FILE on -, se lukee vakiotulon.

The | (putki) sallii komennon 1 vakiolähdön (ennen komentoa | -komennon) olevan vakiotulo komennolle 2 (| komennon jälkeen |). Joten ketjutettu tulos toimii syötteenä jq ‘: een.

jq on kevyt ja joustava komentorivin JSON-prosessori. Sen avulla voit leikata, suodattaa ja kartoittaa ja muuntaa jäsenneltyjä tietoja helposti. ’. []’ Avaa taulukon ja vetää taulukon hakemiston riviksi / riviksi ja -c säilyttää värin jq-muotoilulta. Joten jq . [] -C antaa meidän erottaa JSON-ryhmän kaikki indeksit uudeksi riviksi ja säilyttää jq: n tarjoaman muotoilun väri.

cat assessment-attempts-nested.json | jq ".[]" -c

Vaihe 3: Jos haluat nähdä kuinka monta riviä (mikä on kuinka monta viestiä julkaisemme Kafkalle ) johtuu vaiheessa 2 olevasta komentostamme.

Lisätään | wc -l: n avulla voimme ottaa vakiolähdön komennosta vaiheessa 2, joka on jq-muotoiset ja puretut rivit taulukosta JSON seuraavaan komentoon syötteenä. Seuraava komento on wc -l. wc tulostaa uuden rivin määrän, koska -l tarjotaan vaihtoehtona, joka määrittää uuden rivin.

cat assessment-attempts-nested.json | jq ".[]" -c | wc -l

Tuloksen on oltava rivien määrä, esimerkiksi:

3280

Vaihe 4: Tässä otamme mitä saimme vaiheessa 2 ja julkaise se Kafka-aiheeseen ”arviointiyritykset”. Tässä käytämme docker-compose-oletusta, että Kafka-palvelu käynnistetään Dockerin avulla.

docker-compose exec suorittaa komennon säilössä, jonka nimi on annettu, tässä container1.

Komento, jonka suoritamme, on bash -c “cat assessment-yrityksiä-sisäkkäisiä.json | jq ’.[] ’-C | kafkacat -P -b kafka: 29092 -t-arviointiyritykset & & echo Tuotti 3280 viestiä. ””

  • bash on käynnistää komentotulkki säilössä
  • -c on vaihtoehto pystyä lukemaan komentoja seuraavasta merkkijonosta
  • Seuraava merkkijono ensin ketjuttaa tiedoston assessment-próbál-nested.json sisällön vakiotulosteeksi.
  • Sitten se siirtää vakiotuloksen siitä vakiotulona seuraavaan komentoon: jq . [] -c, joka hakee koko lähdön sisällön (muotoiltu kuten JSON) ja purkaa taulukon jokaisen indeksin uudelle riville.
  • Sen vakiotulos välitetään sitten vakiosyötteenä seuraavaan komentoon: kafkacat – P -b kafka: 29092 -t-arviointiyritykset & & echo Tuotti 3280 viestiä. ”
  • kafkacat -P käynnistää apuohjelman tuottaja-tilassa. Tässä kafkacat lukee viestejä tavallisesta syötteestä (stdin).
  • -b kafka: 29092 käytetään määrittämään Kafka-välittäjä, jonka nimi on vain Kafka isännän kanssa – molemmat on määritetty docker-compose.yml
  • -t -arviointiyrityksiä käytetään määrittämään aiheen nimi, jolle haluamme julkaista
  • & & käytetään komennon luetteloon, jonka haluamme suorittaa sen jälkeen, kun komento on suoritettu loppuun.
  • echo Tuotetut 3280 viestiä. on viesti, jonka haluat näyttää, jos edellinen komento julkaisemisesta Kafkalle on suoritettu onnistuneesti. Tiesimme 3280 vaiheesta 3.
docker-compose exec container1 bash -c "cat assessment-attempts-nested.json | jq ".[]" -c | kafkacat -P -b kafka:29092 -t assessment-attempts && echo "Produced 3280 messages.""

Tuloksen tulisi näyttää tältä:

Produced 3280 messages.

Viitteet

  1. https://kafka.apache.org/
  2. https://docs.docker.com/get-started/overview/
  3. https://www.geeksforgeeks.org/curl-command-in-linux-with-examples/
  4. https: / /stedolan.github.io/jq/