Kafka-kiintiöt ovat olennainen osa usean vuokraajan Kafka-klustereita. Ne estävät Kafka-klusterin suorituskykyä heikentämästä huonosti toimivilla sovelluksilla, jotka kuluttavat liikaa klusterin resursseja. Lisäksi ne mahdollistavat keskitetyn suoratoistodata-alustan käytön usean vuokralaisen alustana, ja sitä voidaan käyttää loppu- ja alkupään sovelluksissa useilla liiketoimintalinjoilla. Kafka tukee kahdenlaisia kiintiöitä: verkon kaistanleveyskiintiöt ja pyytää korkokiintiöitä. Verkon kaistanleveyskiintiöt määrittelevät tavunopeuskynnykset, kuten kuinka paljon dataa asiakassovellukset voivat tuottaa ja kuluttaa kullekin yksittäiselle välittäjälle Kafka-klusterissa mitattuna tavuina sekunnissa. Pyyntökorkokiintiöt rajoittavat sen ajan prosenttiosuutta, jonka kukin yksittäinen välittäjä käyttää asiakassovelluspyyntöjen käsittelyyn. Määrityksestäsi riippuen Kafka-kiintiöt voidaan asettaa tietyille käyttäjille, tietyille asiakastunnuksille tai molemmille.
In Osa 1 Tässä kaksiosaisessa sarjassa keskustelimme Kafka-kiintiöiden täytäntöönpanosta Amazon hallinnoi suoratoistoa Apache Kafkalle (Amazon MSK) klusterit käytön aikana AWS-henkilöllisyyden ja käyttöoikeuksien hallinta (IAM) kulunvalvonta.
Tässä viestissä opastamme sinut vaihe vaiheelta läpi Kafka-kiintiöiden määrittämisen MSK-klusterissa, kun käytät IAM-käytönhallintaa ja testaamme niitä esimerkkiasiakassovellusten avulla.
Ratkaisun yleiskatsaus
Seuraava kuva, jonka esittelimme ensin Osa 1, havainnollistaa kuinka Kafka-asiakassovellukset (ProducerApp-1
, ConsumerApp-1
ja ConsumerApp-2
) pääsy Topic-B
MSK-klusterissa olettamalla IAM-kirjoitus- ja lukuroolit. Jokaisella tuottaja- ja kuluttajaasiakassovelluksella on kiintiö, joka määrittää, kuinka paljon dataa ne voivat tuottaa tai kuluttaa tavuina sekunnissa. The ProducerApp-1
kiintiö mahdollistaa sen, että se tuottaa jopa 1024 tavua sekunnissa välittäjää kohden. Samoin, ConsumerApp-1
ja ConsumerApp-2
kiintiöt antavat heille mahdollisuuden kuluttaa 5120 ja 1024 tavua sekunnissa välittäjää kohden. Seuraavassa on lyhyt selitys arkkitehtuurikaaviossa näkyvästä virtauksesta:
- P1 -
ProducerApp-1
(sen kauttaProducerApp-1-Role
IAM-rooli) olettaaTopic-B-Write-Role
IAM-rooli, johon viestit lähetetäänTopic-B
- P2 - Kanssa
Topic-B-Write-Role
IAM-rooli oletettu,ProducerApp-1
alkaa lähettää viestejä osoitteeseenTopic-B
- C1 -
ConsumerApp-1
(sen kauttaConsumerApp-1-Role
IAM-rooli) jaConsumerApp-2
(sen kauttaConsumerApp-2-Role
IAM-rooli) olettaaTopic-B-Read-Role
IAM-rooli, josta voit lukea viestejäTopic-B
- C2 - Kanssa
Topic-B-Read-Role
IAM-rooli oletettu,ConsumerApp-1
jaConsumerApp-2
alkaa kuluttaa viestejä osoitteestaTopic-B
Huomaa, että tämä viesti käyttää AWS-komentoriviliitäntä (AWS CLI), AWS-pilven muodostuminen malleja ja AWS-hallintakonsoli AWS-resurssien hallintaan ja muokkaamiseen, ja varatut resurssit laskutetaan AWS-tililtäsi.
Korkean tason vaiheet ovat seuraavat:
- Tarjoa MSK-klusteri, jossa on IAM-pääsynhallinta ja Amazonin elastinen laskentapilvi (Amazon EC2) -esiintymiä asiakassovelluksille.
- luoda
Topic-B
MSK-klusterissa. - Luo IAM-roolit, joita asiakassovellukset voivat käyttää
Topic-B
. - Suorita tuottaja- ja kuluttajasovelluksia asettamatta kiintiöitä.
- Määritä asiakassovellusten tuotanto- ja kulutuskiintiöt.
- Suorita sovellukset uudelleen kiintiöiden asettamisen jälkeen.
Edellytykset
On suositeltavaa lukea Osa 1 tästä sarjasta ennen kuin jatkat. Jotta pääset alkuun, tarvitset seuraavat:
- AWS-tili, jota kutsutaan tässä viestissä demotiliksi olettaen, että sen tilitunnus on
1111 1111 1111
- Oikeudet luoda, poistaa ja muokata AWS-resursseja demotilillä
Tarjoa MSK-klusteri, jossa on IAM-pääsynhallinta ja EC2-instanssit
Tämä vaihe sisältää MSK-klusterin provisioinnin, jossa on IAM-pääsynhallinta demotilin VPC:ssä. Lisäksi luomme neljä EC2-instanssia tehdäksemme konfiguraatiomuutoksia MSK-klusteriin sekä isäntätuottaja- ja kuluttaja-asiakassovelluksiin.
Ota käyttöön CloudFormation-pino
- Kloonaa GitHub-arkisto ladataksesi CloudFormation-mallitiedostot ja esimerkkiasiakassovellukset:
- Valitse AWS CloudFormation -konsolista Stacks navigointipaneelissa.
- Valita Luo pino.
- varten Valmistele mallivalitse Malli on valmis.
- varten Mallin lähdevalitse Lataa mallitiedosto.
- Lataa
cfn-msk-stack-1.yaml
Tiedostoamazon-msk-kafka-quotas/cfn-templates
hakemistosta ja valitse sitten seuraava. - varten Pino nimi, tulla sisään
MSKStack
. - Jätä parametrit oletusarvoiksi ja valitse seuraava.
- Vieritä alas Määritä pinoasetukset ja valitse seuraava jatkaa.
- Vieritä alas Arvostelu sivulla, valitse valintaruutu Ymmärrän, että CloudFormation voi luoda IAM-resursseja, ja valitse Lähetä.
Pinon valmistuminen kestää noin 30 minuuttia. Kun pino on luotu onnistuneesti, seuraavat resurssit luodaan:
- VPC, jossa on kolme yksityistä aliverkkoa ja yksi julkinen aliverkko
- MSK-klusteri, jossa on kolme välittäjää, joissa IAM-käyttöoikeus on käytössä
- EC2-instanssi nimeltä
MSKAdminInstance
MSK-klusterin asetusten muokkaamiseen sekä AWS-resurssien luomiseen ja muokkaamiseen - EC2-esiintymiä varten
ProducerApp-1
,ConsumerApp-1
jaConsumerApp-2
, yksi jokaiselle asiakassovellukselle - Erillinen IAM-rooli jokaiselle asiakassovellusta isännöivälle EC2-instanssille, kuten arkkitehtuurikaaviossa näkyy
- Pinosta Lähdöt -välilehti, huomaa
MSKClusterArn
arvoa.
Luo aihe MSK-klusteriin
Luoda Topic-B
MSK-klusterissa suorita seuraavat vaiheet:
- Siirry Amazon EC2 -konsolissa käynnissä olevien EC2-instanssien luetteloon.
- Valitse
MSKAdminInstance
EC2-esiintymä ja valitse kytkeä. - On Session Manager välilehti, valitse kytkeä.
- Suorita seuraavat komennot selaimeesi avautuvassa uudessa välilehdessä:
- Aseta ympäristömuuttuja osoittamaan MSK Cluster Brokers IAM -päätepisteeseen:
- Ota huomioon arvo
BOOTSTRAP_BROKERS_IAM
. - Luo seuraava Kafka CLI -komento
Topic-B
MSK-klusterissa:
Koska MSK-klusteri on varustettu IAM-pääsyn valvonnalla, vaihtoehto --command-config
pisteet config_iam.properties
, joka sisältää IAM-käyttöoikeuksien hallinnassa tarvittavat ominaisuudet, jonka on luonut MSKStack
CloudFormation -pino.
Seuraavat varoitukset saattavat näkyä, kun suoritat Kafka CLI -komentoja, mutta voit jättää ne huomiotta:
- Sen tarkistamiseksi
Topic-B
on luotu, luettele kaikki aiheet:
Luo IAM-rooleja asiakassovelluksille päästäkseen Aiheeseen B
Tämä vaihe sisältää luomisen Topic-B-Write-Role
ja Topic-B-Read-Role
kuten arkkitehtuurikaaviossa näkyy. Topic-B-Write-Role
mahdollistaa kirjoitustoiminnot Topic-B
, ja sen voi olettaa ProducerApp-1
. Samalla tavalla, ConsumerApp-1
ja ConsumerApp-2
voi olettaa Topic-B-Read-Role
suorittaaksesi lukutoimintoja Topic-B
. Suorittaaksesi lukutoiminnot Topic-B
, ConsumerApp-1
ja ConsumerApp-2
on myös kuuluttava aikana määriteltyihin kuluttajaryhmiin MSKStack
pinon päivitys seuraavassa vaiheessa.
Luo roolit seuraavilla vaiheilla:
- Valitse AWS CloudFormation -konsolista Stacks navigointipaneelissa.
- valita
MSKStack
Ja valitse Päivitykset. - varten Valmistele malli, valitse Korvaa nykyinen malli.
- varten Mallin lähdevalitse Lataa mallitiedosto.
- Lataa
cfn-msk-stack-2.yaml
Tiedostoamazon-msk-kafka-quotas/cfn-templates
hakemistosta ja valitse sitten seuraava. - Anna seuraavat pinon lisäparametrit:
-
- varten Aihe B ARN, syötä
Topic-B
RNA.
- varten Aihe B ARN, syötä
ARN on muotoiltava muodossa arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Käytä aiemmin mainitsemaasi MSK-klusterin ARN klusterin nimeä ja klusterin UUID-tunnusta ja anna AWS-alueesi. Lisätietoja on osoitteessa IAM-käytönhallinta Amazon MSK:lle.
-
- varten ConsumerApp-1 Kuluttajaryhmän nimi, tulla sisään
ConsumerApp-1
kuluttajaryhmä ARN.
- varten ConsumerApp-1 Kuluttajaryhmän nimi, tulla sisään
Se on muotoiltava muotoon arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- varten ConsumerApp-2 Kuluttajaryhmän nimi, tulla sisään
ConsumerApp-2
kuluttajaryhmä ARN.
- varten ConsumerApp-2 Kuluttajaryhmän nimi, tulla sisään
Käytä samanlaista muotoa kuin edellinen ARN.
- Valita seuraava jatkaa.
- Vieritä alas Määritä pino vaihtoehtosivu ja valitse seuraava jatkaa.
- Vieritä alas Arvostelu sivulla, valitse valintaruutu Ymmärrän, että CloudFormation voi luoda IAM-resursseja, ja valitse Päivitä pino.
Pinon päivittäminen kestää noin 3 minuuttia. Kun pino on päivitetty onnistuneesti, seuraavat resurssit luodaan:
- Aihe-B-kirjoitus-rooli – IAM-rooli, jolla on lupa suorittaa kirjoitustoimintoja
Topic-B
. Sen luottamuspolitiikka mahdollistaaProducerApp-1-Role
IAM:n rooli ottaa se. - Aihe-B-Lue-Rooli – IAM-rooli, jolla on lupa suorittaa lukutoimintoja
Topic-B
. Sen luottamuspolitiikka mahdollistaaConsumerApp-1-Role
jaConsumerApp-2-Role
IAM-rooleja ottaa se. Lisäksi,ConsumerApp-1
jaConsumerApp-2
on myös kuuluttava kuluttajaryhmiin, jotka määritit, kun päivität pinon lukutoimintoja vartenTopic-B
.
- Pinosta Lähdöt -välilehti, huomaa
TopicBReadRoleARN
jaTopicBWriteRoleARN
arvot.
Suorita tuottaja- ja kuluttajasovelluksia asettamatta kiintiöitä
Täällä juostaan ProducerApp-1
, ConsumerApp-1
ja ConsumerApp-2
asettamatta kiintiöitään. Edellisistä vaiheista tarvitset BOOTSTRAP_BROKERS_IAM
arvo, Topic-B-Write-Role
ARN ja Topic-B-Read-Role
ARN. Asiakassovellusten lähdekoodit ja niiden pakatut versiot ovat saatavilla osoitteessa GitHub-arkisto.
Suorita ConsumerApp-1-sovellus
Suorita ConsumerApp-1
sovellus, suorita seuraavat vaiheet:
- Valitse Amazon EC2 -konsolissa
ConsumerApp-1
EC2-esiintymä ja valitse kytkeä. - On Session Manager välilehti, valitse kytkeä.
- Suorita seuraavat komennot selaimeesi avautuvassa uudessa välilehdessä:
- Suorita
ConsumerApp-1
sovellus, josta voit alkaa kuluttaa viestejäTopic-B
:
Voit löytää lähdekoodi GitHubissa tiedoksi. Komentoriviparametrien tiedot ovat seuraavat:
- -bootstrap-palvelimet – MSK-klusterin bootstrap-välittäjien IAM-päätepiste.
- -oleta-role-arn -
Topic-B-Read-Role
IAM-rooli ARN. Ottaessaan tämän roolin,ConsumerApp-1
lukee aiheen viestejä. - -alue – käyttämäsi alue.
- -aiheen nimi – Aiheen nimi mistä
ConsumerApp-1
lukee viestejä. Oletus onTopic-B
. - -kuluttajaryhmä – Kuluttajaryhmän nimi
ConsumerApp-1
, kuten pinon päivityksen aikana määriteltiin. - -rooli-istunnon-nimi -
ConsumerApp-1
olettaaTopic-B-Read-Role
käyttäen AWS-suojaustunnuspalvelu (AWS STS) SDK.ConsumerApp-1
käyttää tätä rooliistunnon nimeä kutsuessaanassumeRole
toiminto. - -Asiakastunnus – Asiakastunnus
ConsumerApp-1
. - -tulostus-kuluttajakiintiö-mittarit – Lippu, joka ilmaisee, tulostetaanko asiakasmittarit päätelaitteelle
ConsumerApp-1
. - -cw-dimension-nimi - amazonin pilvikello ulottuvuuden nimi, jota käytetään asiakkaan rajoitusmittareiden julkaisemiseen
ConsumerApp-1
. - -cw-dimension-arvo – CloudWatch-ulottuvuuden arvo, jota käytetään asiakkaan rajoitusmittareiden julkaisemiseen
ConsumerApp-1
. - -cw-nimiavaruus – Nimiavaruus missä
ConsumerApp-1
julkaisee CloudWatch-mittareita valvoakseen kuristusta.
- Jos olet tyytyväinen muihin parametreihin, käytä seuraavaa komentoa ja muuta
--assume-role-arn
ja--region
ympäristösi mukaan:
- fetch-throttle-time-avg
ja fetch-throttle-time-max
asiakasmittareiden tulee näyttää 0.0, mikä tarkoittaa, ettei mitään kuristusta tapahdu ConsumerApp-1
. Muista, että emme ole asettaneet kulutuskiintiötä ConsumerApp-1
vielä. Anna sen käydä jonkin aikaa.
Suorita ConsumerApp-2-sovellus
Suorita ConsumerApp-2
sovellus, suorita seuraavat vaiheet:
- Valitse Amazon EC2 -konsolissa
ConsumerApp-2
EC2-esiintymä ja valitse kytkeä. - On Session Manager välilehti, valitse kytkeä.
- Suorita seuraavat komennot selaimeesi avautuvassa uudessa välilehdessä:
- Suorita
ConsumerApp-2
sovellus, josta voit alkaa kuluttaa viestejäTopic-B
:
Koodissa on samanlaiset komentoriviparametrit kuin ConsumerApp-1
keskusteltu aiemmin, paitsi seuraavat:
- -kuluttajaryhmä – Kuluttajaryhmän nimi
ConsumerApp-2
, kuten pinon päivityksen aikana määriteltiin. - -rooli-istunnon-nimi -
ConsumerApp-2
olettaaTopic-B-Read-Role
käyttämällä AWS STS SDK:ta.ConsumerApp-2
käyttää tätä rooliistunnon nimeä kutsuessaanassumeRole
toiminto. - -Asiakastunnus – Asiakastunnus
ConsumerApp-2
.
- Jos olet tyytyväinen muihin parametreihin, käytä seuraavaa komentoa ja muuta
--assume-role-arn
ja--region
ympäristösi mukaan:
- fetch-throttle-time-avg
ja fetch-throttle-time-max
asiakasmittareiden tulee näyttää 0.0, mikä tarkoittaa, ettei mitään kuristusta tapahdu ConsumerApp-2
. Muista, että emme ole asettaneet kulutuskiintiötä ConsumerApp-2
vielä. Anna sen käydä jonkin aikaa.
Suorita ProducerApp-1-sovellus
Suorita ProducerApp-1
sovellus, suorita seuraavat vaiheet:
- Valitse Amazon EC2 -konsolissa
ProducerApp-1
EC2-esiintymä ja valitse kytkeä. - On Session Manager välilehti, valitse kytkeä.
- Suorita seuraavat komennot selaimeesi avautuvassa uudessa välilehdessä:
- Suorita
ProducerApp-1
sovellus aloittaaksesi viestien lähettämisenTopic-B
:
Voit löytää lähdekoodi GitHubissa tiedoksi. Komentoriviparametrien tiedot ovat seuraavat:
- -bootstrap-palvelimet – MSK-klusterin bootstrap-välittäjien IAM-päätepiste.
- -oleta-role-arn -
Topic-B-Write-Role
IAM-rooli ARN. Ottaessaan tämän roolin,ProducerApp-1
kirjoittaa viestejä aiheeseen. - -aiheen nimi -
ProducerApp-1
lähettää viestejä tähän aiheeseen. Oletus onTopic-B
. - -alue – Käyttämäsi AWS-alue.
- -numero-viestit – Viestien määrä
ProducerApp-1
hakemus lähetetään aiheeseen. - -rooli-istunnon-nimi -
ProducerApp-1
olettaaTopic-B-Write-Role
käyttämällä AWS STS SDK:ta.ProducerApp-1
käyttää tätä rooliistunnon nimeä kutsuessaanassumeRole
toiminto. - -Asiakastunnus – Asiakastunnus
ProducerApp-1
. - -tuottajatyyppinen -
ProducerApp-1
voidaan ajaa joko synkronoidusti or asynkronisesti. Vaihtoehdot ovat synkronoida or async. - -print-tuottaja-kiintiömetrit – Lippu, joka ilmaisee, tulostetaanko asiakasmittarit päätelaitteelle Tuottajasovellus-1.
- -cw-dimension-nimi – CloudWatch-ulottuvuuden nimi, jota käytetään asiakkaan rajoitusmittareiden julkaisemiseen Tuottajasovellus-1.
- -cw-dimension-arvo – CloudWatch-ulottuvuuden arvo, jota käytetään asiakkaan rajoitusmittareiden julkaisemiseen Tuottajasovellus-1.
- -cw-nimiavaruus – Nimiavaruus missä Tuottajasovellus-1 julkaisee CloudWatch-mittareita valvoakseen kuristusta.
- Jos olet tyytyväinen muihin parametreihin, käytä seuraavaa komentoa ja muuta
--assume-role-arn
ja--region
ympäristösi mukaan. Synkronisen Kafka-tuottajan ajamiseen se käyttää vaihtoehtoa--producer-type sync
:
Vaihtoehtoisesti käytä --producer-type async
johtaa asynkronista tuottajaa. Katso lisätietoja osoitteesta Asynkroninen lähetys.
- produce-throttle-time-avg
ja produce-throttle-time-max
asiakasmittareiden tulee näyttää 0.0, mikä tarkoittaa, ettei mitään kuristusta tapahdu ProducerApp-1
. Muista, että emme ole määrittäneet tuotantokiintiötä ProducerApp-1
vielä. Tarkista tuo ConsumerApp-1
ja ConsumerApp-2
voi kuluttaa viestejä ja huomata, että niitä ei ole rajoitettu. Pysäytä kuluttaja- ja tuottajaasiakassovellukset painamalla Ctrl + C vastaavilla selaimen välilehdillä.
Aseta tuotanto- ja kulutuskiintiöt asiakassovelluksille
Nyt kun olemme ajaneet tuottaja- ja kuluttajasovellukset ilman kiintiöitä, asetamme niiden kiintiöt ja suoritamme ne uudelleen.
Avaa Sessions Manager terminaali MSKAdminInstance
EC2-ilmentymä aiemmin kuvatulla tavalla ja suorita seuraavat komennot löytääksesi yhden MSK-klusterin välittäjän oletuskokoonpanon. MSK-klusterit on varustettu Kafka-kiintiöiden oletuskokoonpanolla.
Seuraava kuvakaappaus näyttää Broker-1
oletusarvot quota.consumer.default
ja quota.producer.default
.
ProducerApp-1-kiintiön määritys
Korvaa paikkamerkit kaikissa tämän osion komentoissa tiliäsi vastaavilla arvoilla.
Aseta aiemmin käsitellyn arkkitehtuurikaavion mukaan ProducerApp-1
tuottaa kiintiön 1024 tavuun sekunnissa. varten <ProducerApp-1 Client Id>
ja <ProducerApp-1 Role Session>
, varmista, että käytät samoja arvoja, joita käytit ajaessasi ProducerApp-1
aikaisemmin (producerapp-1-client-id
ja producerapp-1-role-session
vastaavasti):
Varmista ProducerApp-1
tuottaa kiintiö seuraavalla komennolla:
Voit poistaa ProducerApp-1
tuottaa kiintiötä käyttämällä seuraavaa komentoa, mutta älä suorita komentoa kun testaamme kiintiöitä seuraavaksi.
ConsumerApp-1-kiintiön määritys
Korvaa paikkamerkit kaikissa tämän osion komentoissa tiliäsi vastaavilla arvoilla.
Asetetaan kulutuskiintiö 5120 tavua sekunnissa ConsumerApp-1
. Foorumi <ConsumerApp-1 Client Id>
ja <ConsumerApp-1 Role Session>
, varmista, että käytät samoja arvoja, joita käytit ajaessasi ConsumerApp-1
aikaisemmin (consumerapp-1-client-id
ja consumerapp-1-role-session
vastaavasti):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
Varmista ConsumerApp-1
kuluta kiintiö käyttämällä seuraavaa komentoa:
Voit poistaa ConsumerApp-1
kuluttaa kiintiötä käyttämällä seuraavaa komentoa, mutta älä suorita komentoa kun testaamme kiintiöitä seuraavaksi.
ConsumerApp-2-kiintiön määritys
Korvaa paikkamerkit kaikissa tämän osion komentoissa tiliäsi vastaavilla arvoilla.
Asetetaan kulutuskiintiö 1024 tavua sekunnissa ConsumerApp-2
. Foorumi <ConsumerApp-2 Client Id>
ja <ConsumerApp-2 Role Session>
, varmista, että käytät samoja arvoja, joita käytit ajaessasi ConsumerApp-2
aikaisemmin (consumerapp-2-client-id
ja consumerapp-2-role-session
vastaavasti):
Varmista ConsumerApp-2
kuluta kiintiö käyttämällä seuraavaa komentoa:
Kuten ConsumerApp-1
, voit poistaa ConsumerApp-2
kuluttaa kiintiötä käyttämällä samaa komentoa kanssa ConsumerApp-2
asiakkaan ja käyttäjän tiedot.
Suorita tuottaja- ja kuluttajasovellukset uudelleen kiintiöiden asettamisen jälkeen
Suoritetaan sovellukset uudelleen tarkistaaksemme kiintiöiden vaikutuksen.
Suorita ProducerApp-1 uudelleen
Uusinta ProducerApp-1
in synkroninen -tilassa samalla komennolla, jota käytit aiemmin. Seuraava kuvakaappaus havainnollistaa, että milloin ProducerApp-1
saavuttaa kiintiönsä millä tahansa välittäjistä, the produce-throttle-time-avg
ja produce-throttle-time-max client
mittareiden arvo on yli 0.0. Arvo yli 0.0 osoittaa sen ProducerApp-1
on kuristettu. Sallia ProducerApp-1
toimii muutaman sekunnin ajan ja pysäytä se sitten käyttämällä Ctrl + C.
Voit myös testata tuotantokiintiön vaikutusta suorittamalla uudelleen ProducerApp-1
taas sisään asynkroninen tila (--producer-type async
). Synkronisen ajon tapaan seuraava kuvakaappaus osoittaa, että milloin ProducerApp-1
saavuttaa kiintiönsä millä tahansa välittäjistä, the produce-throttle-time-avg
ja produce-throttle-time-max
asiakasmittarien arvo on yli 0.0. Arvo yli 0.0 osoittaa sen ProducerApp-1
on kuristettu. Salli asynkroninen ProducerApp-1
juosta hetkeksi.
Lopulta näet a TimeoutException
jossa org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Kun käytät asynkroninen tuottajalle ja lähettämällä viestejä suuremmalla nopeudella kuin välittäjä voi kiintiön vuoksi hyväksyä, viestit joutuvat ensin asiakassovelluksen muistiin. Asiakkaalta loppuu lopulta puskuritila, jos viestien lähetysnopeus ylittää edelleen viestien hyväksymisnopeuden, mikä aiheuttaa seuraavan Producer.send()
puhelu estetään. Producer.send()
lopulta heittää a TimeoutException
jos aikakatkaisuviive ei ole riittävä, jotta välittäjä ehtisi kiinni tuottajahakemukseen. Lopettaa ProducerApp-1
käyttämällä Ctrl + C.
Suorita ConsumerApp-1 uudelleen
Uusinta ConsumerApp-1
samalla komennolla, jota käytit aiemmin. Seuraava kuvakaappaus havainnollistaa, että milloin ConsumerApp-1
saavuttaa kiintiönsä, fetch-throttle-time-avg
ja fetch-throttle-time-max client
mittareiden arvo on yli 0.0. Arvo yli 0.0 osoittaa sen ConsumerApp-1
on kuristettu.
allow ConsumerApp-1
toimii muutaman sekunnin ajan ja pysäytä se sitten käyttämällä Ctrl + C.
Suorita ConsumerApp-2 uudelleen
Uusinta ConsumerApp-2
samalla komennolla, jota käytit aiemmin. Samoin kun ConsumerApp-2
saavuttaa kiintiönsä, fetch-throttle-time-avg
ja fetch-throttle-time-max client
mittausarvo on suurempi 0.0. Yläpuolella oleva arvo 0.0 tarkoittaa sitä ConsumerApp-2
on kuristettu. Sallia ConsumerApp-2
käydäksesi muutaman sekunnin ajan ja pysäytä se sitten painamalla Ctrl + C.
Asiakaskiintiömittarit Amazon CloudWatchissa
In Osa 1Selitimme, että asiakasmittarit ovat Kafka-klusteriin yhdistävien asiakkaiden paljastamia mittareita. Tarkastellaan CloudWatchin asiakasmittareita.
- Valitse CloudWatch-konsolissa Kaikki mittarit.
- Alle Mukautetut nimitilat, valitse nimiavaruus, jonka annoit asiakassovelluksia suoritettaessa.
- Valitse ulottuvuuden nimi ja valitse
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
jafetch-throttle-time-avg metrics
kaikille sovelluksille.
Nämä mittarit osoittavat kuristuskäyttäytymisen kohteelle ProducerApp-1
, ConsumerApp-1
ja ConsumerApp-2
sovellukset, jotka on testattu edellisen osan kiintiökokoonpanoilla. Seuraavat kuvakaappaukset osoittavat kuristuksen ProducerApp-1
, ConsumerApp-1
ja ConsumerApp-2
verkon kaistanleveyskiintiöiden perusteella. ProducerApp-1
, ConsumerApp-1
ja ConsumerApp-2
sovellukset syöttävät asiakastietonsa CloudWatchiin. Voit löytää lähdekoodi GitHubissa tiedoksi.
Suojattu asiakastunnus ja rooliistunnon nimi
Keskustelimme Kafka-kiintiöiden määrittämisestä sovelluksen avulla Asiakastunnus ja todennettu lähettämä rehtori. Kun asiakassovellus ottaa IAM-roolin päästäkseen Kafka-aiheisiin MSK-klusterissa, jossa IAM-todennus on käytössä, se todennettu lähettämä päämies on esitetty seuraavassa muodossa (lisätietoja on kohdassa IAM-tunnisteet):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Se sisältää rooliistunnon nimi (tässä tapauksessa, producerapp-1-role-session
) käytetään asiakassovelluksessa, kun se omaksui IAM-roolin AWS STS SDK:n kautta. Asiakassovellus lähdekoodi on saatavilla viitteellesi. The Asiakastunnus on looginen nimimerkkijono (esim. producerapp-1-client-id
), jonka sovellusryhmä on määrittänyt sovelluskoodissa. Siksi sovellus voi esiintyä toisena sovelluksena, jos se saa Asiakastunnus ja rooliistunnon nimi toisesta sovelluksesta ja jos sillä on lupa ottaa sama IAM-rooli.
Kuten arkkitehtuurikaaviosta näkyy, ConsumerApp-1
ja ConsumerApp-2
ovat kaksi erillistä asiakassovellusta vastaavineen kiintiöjakoineen. Koska molemmilla on lupa ottaa sama IAM-rooli (Topic-B-Read-Role
) demotilillä he voivat kuluttaa viestejä Topic-B
. Siten MSK-klusterivälittäjät erottavat ne niiden perusteella asiakastunnukset ja Käyttäjät (jotka sisältävät vastaavat rooliistunnon nimi arvot). Jos ConsumerApp-2
jotenkin saa ConsumerApp-1
rooliistunnon nimi ja Asiakastunnus, se voi esiintyä ConsumerApp-1
määrittämällä ConsumerApp-1
rooliistunnon nimi ja Asiakastunnus sovelluskoodissa.
Oletetaan ConsumerApp-1
käyttötarkoituksiin consumerapp-1-client-id
ja consumerapp-1-role-session
koska sen Asiakastunnus ja rooliistunnon nimi, vastaavasti. Siksi, ConsumerApp-1's
todennettu lähettämä päämies näkyy seuraavasti, kun se olettaa Topic-B-Read-Role
IAM-rooli:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Vastaavasti ConsumerApp-2
käyttötarkoituksiin consumerapp-2-client-id
ja consumerapp-2-role-session
koska sen Asiakastunnus ja rooliistunnon nimi, vastaavasti. Siksi, ConsumerApp-2's
todennettu lähettämä päämies näkyy seuraavasti, kun se olettaa Topic-B-Read-Role
IAM-rooli:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
hankkii ConsumerApp-1's
Asiakastunnus ja rooliistunnon nimi ja määrittää ne sovelluskoodissaan, MSK-klusterivälittäjät käsittelevät sitä ConsumerApp-1
ja katsoa sen Asiakastunnus as consumerapp-1-client-id
, ja todennettu lähettämä pääasiallinen seuraavasti:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Tämä mahdollistaa ConsumerApp-2
kuluttaa MSK-klusterin dataa enintään 5120 tavua sekunnissa alkuperäisen kiintiövarauksensa 1024 tavun sijaan. Näin ollen ConsumerApp-1's
suorituskyky vaikuttaa negatiivisesti, jos ConsumerApp-2
toimii samanaikaisesti.
Paranneltu arkkitehtuuri
Voit esitellä AWS -salaisuuksien hallinta ja AWS-avainhallintapalvelu (AWS KMS) arkkitehtuurissa sovellusten suojaamiseksi asiakastunnukset ja rooliistunnon nimet. Vahvemman hallinnan takaamiseksi sovellusten asiakastunnus ja rooliistunnon nimi on tallennettava salattuina salaisuuksina Secrets Manageriin. Salattuihin salaisuuksiin ja KMS-asiakashallintaavaimeen (CMK) liittyvät IAM-resurssikäytännöt sallivat sovellusten käyttää ja purkaa vain vastaavia asiakastunnusta ja rooliistunnon nimeä. Tällä tavalla sovellukset eivät pääse käsiksi toistensa asiakastunnukseen ja rooliistunnon nimeen eivätkä näyttele toisiaan. Seuraava kuva näyttää parannetun arkkitehtuurin.
Päivitetyssä kulussa on seuraavat vaiheet:
- P1 -
ProducerApp-1
hakee senclient-id
jarole-session-name
salaisuudet Secrets Managerilta - P2 -
ProducerApp-1
määrittää salaisuudenclient-id
asCLIENT_ID_CONFIG
sovelluskoodissa ja olettaaTopic-B-Write-Role
(sen kauttaProducerApp-1-Role
IAM-rooli) välittämällä salaisuudenrole-session-name
AWS STS SDK:lleassumeRole
toimintokutsu - P3 - Kanssa
Topic-B-Write-Role
IAM-rooli oletettu,ProducerApp-1
alkaa lähettää viestejä osoitteeseenTopic-B
- C1 -
ConsumerApp-1
jaConsumerApp-2
noutaa omansaclient-id
jarole-session-name
salaisuudet Secrets Managerilta - C2 -
ConsumerApp-1
jaConsumerApp-2
määrittää vastaavan salaisuudenclient-id
asCLIENT_ID_CONFIG
sovelluskoodissaan ja oletaTopic-B-Write-Role
(ViaConsumerApp-1-Role
jaConsumerApp-2-Role
IAM-roolit) välittämällä salaisuutensarole-session-name
AWS STS SDK:ssaassumeRole
toimintokutsu - C3 - Kanssa
Topic-B-Read-Role
IAM-rooli oletettu,ConsumerApp-1
jaConsumerApp-2
alkaa kuluttaa viestejä osoitteestaTopic-B
Katso asiakirjoista AWS -salaisuuksien hallinta ja AWS KMS saadaksesi paremman käsityksen siitä, kuinka ne sopivat arkkitehtuuriin.
Siivoa resurssit
Siirry CloudFormation-konsoliin ja poista MSKStack
pino. Kaikki tämän viestin aikana luodut resurssit poistetaan.
Yhteenveto
Tässä viestissä käsittelimme yksityiskohtaiset vaiheet Amazon MSK-kiintiöiden määrittämiseksi ja osoitimme niiden vaikutuksen esimerkkiasiakassovellusten avulla. Lisäksi keskustelimme siitä, kuinka voit käyttää asiakasmittareita sen määrittämiseen, onko asiakassovellus estetty. Korostimme myös mahdollisen ongelman, joka liittyy selkeän tekstin asiakastunnuksiin ja rooliistunnon nimiin. Suosittelemme Kafka-kiintiöiden käyttöönottoa Amazon MSK:n kanssa käyttämällä Secrets Manageria ja AWS KMS:ää tarkistetun arkkitehtuurikaavion mukaisesti nollaluottamusarkkitehtuurin varmistamiseksi.
Jos sinulla on palautetta tai kysyttävää tästä postauksesta, mukaan lukien tarkistettu arkkitehtuuri, otamme mielellämme vastaan. Toivomme, että pidit tämän postauksen lukemisesta.
kirjailijasta
Vikas Bajaj on vanhempi johtaja, ratkaisuarkkitehdit, rahoituspalvelut Amazon Web Services -palvelussa. Hänellä on yli kahden vuosikymmenen kokemus rahoituspalveluista ja työskentelystä digitaalisten yritysten kanssa, ja hän neuvoo asiakkaita tuotesuunnittelussa, teknologian tiekartoissa ja sovellusarkkitehtuureissa.
- SEO-pohjainen sisällön ja PR-jakelu. Vahvista jo tänään.
- EVM Finance. Hajautetun rahoituksen yhtenäinen käyttöliittymä. Pääsy tästä.
- Quantum Media Group. IR/PR vahvistettu. Pääsy tästä.
- PlatoAiStream. Web3 Data Intelligence. Tietoa laajennettu. Pääsy tästä.
- Lähde: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :on
- :On
- :ei
- :missä
- $ YLÖS
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- pystyy
- Meistä
- edellä
- Hyväksyä
- hyväksymisestä
- pääsy
- Tili
- tunnustaa
- poikki
- lisätä
- Lisäksi
- lisä-
- Lisäksi
- Jälkeen
- uudelleen
- Kaikki
- jako
- määrärahat
- sallia
- mahdollistaa
- Myös
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- ja
- Toinen
- Kaikki
- Apache
- Apache Kafka
- näyttää
- Hakemus
- sovellukset
- suunnilleen
- arkkitehtuuri
- OVAT
- AS
- liittyvä
- oletettu
- At
- todennettu
- Authentication
- saatavissa
- AWS
- AWS-pilven muodostuminen
- kaistanleveys
- perustua
- BE
- koska
- ollut
- ennen
- ovat
- Paremmin
- tukossa
- Bootstrap
- sekä
- pohja
- Laatikko
- välittäjä
- välittäjät
- selain
- puskuri
- liiketoiminta
- yritykset
- mutta
- by
- soittaa
- nimeltään
- soittamalla
- CAN
- tapaus
- KISSA
- paini
- aiheuttaen
- CD
- keskeinen
- muuttaa
- Muutokset
- tarkastaa
- Valita
- luokka
- asiakas
- asiakkaat
- Cluster
- koodi
- Yhteinen
- täydellinen
- Laskea
- käsitteet
- Konfigurointi
- määritetty
- Kytkeminen
- siis
- Console
- kuluttaa
- kuluttaja
- sisältää
- jatkaa
- jatkuu
- jatkuu
- ohjaus
- katettu
- luoda
- luotu
- Luominen
- Nykyinen
- asiakas
- Asiakkaat
- tiedot
- Tietoalusta
- vuosikymmeninä
- Pura
- oletusarvo
- viivyttää
- esittely
- osoittivat
- Riippuen
- kuvata
- on kuvattu
- Malli
- yksityiskohtainen
- yksityiskohdat
- Määrittää
- määrittää
- Ulottuvuus
- keskusteltiin
- näyttö
- erottaa
- dokumentointi
- download
- kaksi
- aikana
- kukin
- Aikaisemmin
- kaiku
- vaikutus
- myöskään
- mahdollistaa
- käytössä
- mahdollistaa
- salattu
- päätepiste
- valvoa
- tehostettu
- varmistaa
- enter
- ympäristö
- virheet
- Eetteri (ETH)
- lopulta
- tutkia
- esimerkki
- ylittää
- Paitsi
- experience
- selitti
- selitys
- vienti
- avoin
- palaute
- harvat
- Kuva
- filee
- Asiakirjat
- taloudellinen
- rahoituspalvelut
- Löytää
- Etunimi
- sovittaa
- virtaus
- jälkeen
- seuraa
- varten
- muoto
- neljä
- alkaen
- toiminto
- Lisäksi
- saada
- mennä
- GitHub
- hallinto
- suurempi
- Ryhmä
- Ryhmän
- onnellinen
- Olla
- he
- kuulla
- korkean tason
- Korostettu
- toivoa
- isäntä
- isännät
- Miten
- Miten
- HTML
- http
- HTTPS
- IAM
- ID
- Identiteetti
- ids
- if
- havainnollistaa
- kuva
- vaikutti
- täytäntöönpano
- täytäntöönpanosta
- in
- Mukaan lukien
- osoittaa
- ilmaisee
- ilmaisee
- henkilökohtainen
- tiedot
- esimerkki
- kiinteä
- tulee
- esitellä
- käyttöön
- ISN
- kysymys
- IT
- SEN
- Jaava
- jpg
- Kafka
- avain
- tunnettu
- RAJOITA
- linja
- linjat
- Lista
- looginen
- tehdä
- onnistui
- johto
- johtaja
- maksimi
- Saattaa..
- mitattu
- Muisti
- viestien
- Metrics
- pöytäkirja
- tila
- muokata
- monitori
- lisää
- MS
- paljon
- moninkertainen
- täytyy
- nimi
- nimet
- Navigoida
- suunnistus
- Tarve
- negatiivisesti
- verkko
- Uusi
- seuraava
- Nro
- huomattava
- Ilmoitus..
- numero
- hankkii
- esiintyviä
- of
- on
- ONE
- vain
- avautuu
- toimi
- Operations
- Vaihtoehto
- Vaihtoehdot
- or
- tilata
- alkuperäinen
- Muut
- ulos
- yli
- pakattu
- sivulla
- lasi
- parametri
- parametrit
- osa
- Hyväksytty
- Ohimenevä
- polku
- osuus
- suorittaa
- suorituskyky
- lupa
- plaintext
- foorumi
- Platon
- Platonin tietotieto
- PlatonData
- Kohta
- pistettä
- politiikkaa
- politiikka
- Kirje
- mahdollinen
- painamalla
- estää
- edellinen
- aiemmin
- Pääasiallinen
- yksityinen
- käsittely
- tuottaa
- tuottaja
- Tuotteet
- tuotesuunnittelu
- ominaisuudet
- toimittaa
- mikäli
- julkinen
- julkaista
- kysymykset
- hinta
- pikemminkin
- saavuttaa
- Lue
- Lukeminen
- suositella
- suositeltu
- tarkoitettuja
- alue
- muistaa
- poistaa
- korvata
- säilytyspaikka
- edustettuina
- pyyntö
- pyynnöt
- tarvitaan
- resurssi
- Esittelymateriaalit
- ne
- vastaavasti
- REST
- tiekarttoja
- Rooli
- roolit
- ajaa
- juoksu
- s
- sama
- vakuuttunut
- tyytyväinen
- kuvakaappauksia
- sdk
- Toinen
- sekuntia
- salaisuus
- Osa
- turvallinen
- turvallisuus
- turvallisuusmerkki
- nähdä
- lähettää
- lähettäminen
- vanhempi
- erillinen
- Sarjat
- Palvelut
- Istunto
- setti
- asetus
- settings
- shouldnt
- esitetty
- Näytä
- samankaltainen
- samalla lailla
- koska
- Ratkaisumme
- lähde
- lähdekoodi
- Tila
- erityinen
- määritelty
- pino
- vaiheissa
- Alkaa
- alkoi
- Vaihe
- Askeleet
- stop
- tallennettu
- streaming
- jono
- vahvempi
- aliverkkoon
- myöhempi
- Onnistuneesti
- niin
- riittävä
- toimitetaan
- Tukee
- ottaa
- joukkue-
- Elektroniikka
- sapluuna
- malleja
- terminaali
- testi
- testattu
- Testaus
- kuin
- että
- -
- Lähde
- heidän
- Niitä
- sitten
- siksi
- ne
- tätä
- kolmella
- Kautta
- suoritusteho
- aika
- että
- symbolinen
- aihe
- Aiheet
- kohdella
- Luottamus
- kaksi
- tyyppi
- tyypit
- ymmärtäminen
- Päivitykset
- päivitetty
- päivittäminen
- käyttää
- käytetty
- käyttäjä
- Käyttäjät
- käyttötarkoituksiin
- käyttämällä
- arvo
- arvot
- todentaa
- kautta
- Näytä
- oli
- Tapa..
- we
- verkko
- verkkopalvelut
- HYVIN
- kun
- onko
- joka
- vaikka
- tulee
- with
- ilman
- työskentely
- kirjoittaa
- vielä
- te
- Sinun
- zephyrnet