Cotele Kafka sunt parte integrantă a clusterelor Kafka multi-locatari. Acestea împiedică performanța clusterului Kafka să fie afectată negativ de aplicațiile cu un comportament prost care consumă excesiv resursele clusterului. În plus, ele permit ca platforma centrală de streaming de date să fie operată ca o platformă multi-locată și utilizată de aplicațiile din aval și din amonte din mai multe linii de afaceri. Kafka acceptă două tipuri de cote: cote de lățime de bandă a rețelei și solicita cote de tarif. Cotele de lățime de bandă ale rețelei definesc praguri ale ratei de octeți, cum ar fi cantitatea de date pe care aplicațiile client pot produce și consuma de la fiecare broker individual dintr-un cluster Kafka, măsurată în octeți pe secundă. Cotele ratelor de solicitare limitează procentul de timp pe care fiecare broker individual îl petrece procesând cererile de aplicații ale clienților. În funcție de configurația dvs., cotele Kafka pot fi setate pentru anumiți utilizatori, anumite ID-uri de client sau ambele.
In Partea 1 din această serie în două părți, am discutat despre conceptele cum să impunem cotele Kafka în Streaming gestionat de Amazon pentru Apache Kafka (Amazon MSK) clustere în timpul utilizării Gestionarea identității și accesului AWS (IAM) control acces.
În această postare, vă prezentăm implementarea pas cu pas a setării cotelor Kafka într-un cluster MSK în timp ce utilizați controlul accesului IAM și le testăm prin aplicații client exemplu.
Prezentare generală a soluțiilor
Următoarea figură, pe care am introdus-o prima dată în Partea 1, ilustrează modul în care aplicațiile client Kafka (ProducerApp-1
, ConsumerApp-1
, și ConsumerApp-2
) acces Topic-B
în clusterul MSK prin asumarea rolurilor IAM de scriere și citire. Fiecare aplicație client producător și consumator are o cotă care determină câte date pot produce sau consuma în octeți/secundă. The ProducerApp-1
cota îi permite să producă până la 1024 de octeți/secundă per broker. În mod similar, cel ConsumerApp-1
și ConsumerApp-2
cotele le permit să consume 5120 și, respectiv, 1024 octeți/secundă per broker. Următoarea este o scurtă explicație a fluxului prezentat în diagrama arhitecturii:
- P1 -
ProducerApp-1
(prin intermediul acestuiaProducerApp-1-Role
Rolul IAM) își asumăTopic-B-Write-Role
Rol IAM către care trimite mesajeTopic-B
- P2 - Cu
Topic-B-Write-Role
Rolul IAM asumat,ProducerApp-1
începe să trimită mesaje cătreTopic-B
- C1 -
ConsumerApp-1
(prin intermediul acestuiaConsumerApp-1-Role
rol IAM) șiConsumerApp-2
(prin intermediul acestuiaConsumerApp-2-Role
rolul IAM) asumaTopic-B-Read-Role
Rolul IAM din care să citiți mesajeleTopic-B
- C2 - Cu
Topic-B-Read-Role
Rolul IAM asumat,ConsumerApp-1
șiConsumerApp-2
începe să consumi mesaje de laTopic-B
Rețineți că această postare folosește Interfața liniei de comandă AWS (AWS CLI), Formarea AWS Cloud șabloane și Consola de administrare AWS pentru furnizarea și modificarea resurselor AWS și resursele furnizate vor fi facturate în contul dvs. AWS.
Pașii de nivel înalt sunt următorii:
- Furnizați un cluster MSK cu control acces IAM și Cloud Elastic de calcul Amazon (Amazon EC2) instanțe pentru aplicații client.
- Crea
Topic-B
pe clusterul MSK. - Creați roluri IAM pe care să le acceseze aplicațiile client
Topic-B
. - Rulați aplicațiile producător și consumator fără a stabili cote.
- Configurați cotele de producție și consum pentru aplicațiile client.
- Rulați din nou aplicațiile după stabilirea cotelor.
Cerințe preliminare
Este recomandat să citiți Partea 1 din această serie înainte de a continua. Pentru a începe, aveți nevoie de următoarele:
- Un cont AWS care va fi denumit cont demo în această postare, presupunând că ID-ul contului său este
1111 1111 1111
- Permisiuni pentru a crea, șterge și modifica resurse AWS în contul demo
Furnizați un cluster MSK cu control acces IAM și instanțe EC2
Acest pas implică furnizarea unui cluster MSK cu control de acces IAM într-un VPC în contul demo. În plus, creăm patru instanțe EC2 pentru a face modificări de configurare la clusterul MSK și la aplicațiile client de producător și consumator gazdă.
Implementați stiva CloudFormation
- Clonați GitHub depozit pentru a descărca fișierele șablon CloudFormation și exemple de aplicații client:
- În consola AWS CloudFormation, alegeți Stive în panoul de navigare.
- Alege Creați stivă.
- Pentru Pregătiți șablonul, Selectați Șablonul este gata.
- Pentru Sursa șablonului, Selectați Încărcați un fișier șablon.
- Încărcați
cfn-msk-stack-1.yaml
fișier dinamazon-msk-kafka-quotas/cfn-templates
director, apoi alegeți Pagina Următoare →. - Pentru Numele stivei, introduce
MSKStack
. - Lăsați parametrii ca impliciti și alegeți Pagina Următoare →.
- Derulați până în partea de jos a Configurați opțiunile stivei pagina și alegeți Pagina Următoare → pentru a continua.
- Derulați până în partea de jos a Recenzie pagina, bifați caseta de selectare Recunosc că CloudFormation poate crea resurse IAMși alegeți Trimite mesaj.
Va dura aproximativ 30 de minute pentru ca stiva să fie finalizată. După ce stiva a fost creată cu succes, vor fi create următoarele resurse:
- Un VPC cu trei subrețele private și o subrețea publică
- Un cluster MSK cu trei brokeri cu controlul accesului IAM activat
- A apelat o instanță EC2
MSKAdminInstance
pentru modificarea setărilor clusterului MSK, precum și pentru crearea și modificarea resurselor AWS - Instanțele EC2 pentru
ProducerApp-1
,ConsumerApp-1
, șiConsumerApp-2
, câte unul pentru fiecare aplicație client - Un rol IAM separat pentru fiecare instanță EC2 care găzduiește aplicația client, așa cum se arată în diagrama arhitecturii
- Din stiva ieşiri fila, rețineți că
MSKClusterArn
valoare.
Creați un subiect pe clusterul MSK
A crea Topic-B
pe clusterul MSK, parcurgeți următorii pași:
- Pe consola Amazon EC2, navigați la lista de instanțe EC2 care rulează.
- selectaţi
MSKAdminInstance
instanță EC2 și alegeți Conectați. - Pe Manager sesiune fila, alegeți Conectați.
- Rulați următoarele comenzi în noua filă care se deschide în browser:
- Setați variabila de mediu să indice punctul final IAM al brokerilor MSK Cluster:
- Luați notă de valoarea lui
BOOTSTRAP_BROKERS_IAM
. - Rulați următoarea comandă Kafka CLI pentru a crea
Topic-B
pe clusterul MSK:
Deoarece clusterul MSK este prevăzut cu control de acces IAM, opțiunea --command-config
arata spre config_iam.properties
, care conține proprietățile necesare pentru controlul accesului IAM, create de MSKStack
Stiva CloudFormation.
Următoarele avertismente pot apărea atunci când rulați comenzile Kafka CLI, dar le puteți ignora:
- Pentru a verifica asta
Topic-B
a fost creat, enumerați toate subiectele:
Creați roluri IAM pentru aplicațiile client pentru a accesa Subiectul-B
Acest pas presupune crearea Topic-B-Write-Role
și Topic-B-Read-Role
așa cum se arată în diagrama arhitecturii. Topic-B-Write-Role
permite operațiuni de scriere pe Topic-B
, și poate fi presupus de către ProducerApp-1
. Într-un mod similar, cel ConsumerApp-1
și ConsumerApp-2
poate presupune Topic-B-Read-Role
pentru a efectua operațiuni de citire pe Topic-B
. Pentru a efectua operațiuni de citire pe Topic-B
, ConsumerApp-1
și ConsumerApp-2
trebuie să aparțină și grupurilor de consumatori specificate în timpul MSKStack
actualizarea stivei în pasul următor.
Creați rolurile cu următorii pași:
- În consola AWS CloudFormation, alegeți Stive în panoul de navigare.
- Selectați
MSKStack
Și alegeți Actualizează. - Pentru Pregătiți șablonul, selectați Înlocuire șablonul curent.
- Pentru Sursa șablonului, Selectați Încărcați un fișier șablon.
- Încărcați
cfn-msk-stack-2.yaml
fișier dinamazon-msk-kafka-quotas/cfn-templates
director, apoi alegeți Pagina Următoare →. - Furnizați următorii parametri suplimentari de stivă:
-
- Pentru Subiectul B ARN, introduceți tasta
Topic-B
ARN.
- Pentru Subiectul B ARN, introduceți tasta
ARN-ul trebuie formatat ca arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Utilizați numele clusterului și UUID-ul clusterului din ARN-ul cluster MSK pe care l-ați notat mai devreme și furnizați regiunea dvs. AWS. Pentru mai multe informații, consultați Controlul accesului IAM pentru Amazon MSK.
-
- Pentru ConsumerApp-1 Numele grupului de consumatori, introduce
ConsumerApp-1
grup de consumatori ARN.
- Pentru ConsumerApp-1 Numele grupului de consumatori, introduce
Trebuie să fie formatat ca arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Pentru ConsumerApp-2 Numele grupului de consumatori, introduce
ConsumerApp-2
grup de consumatori ARN.
- Pentru ConsumerApp-2 Numele grupului de consumatori, introduce
Utilizați un format similar cu ARN-ul anterior.
- Alege Pagina Următoare → pentru a continua.
- Derulați până în partea de jos a Configurați stiva opțiuni și alegeți Pagina Următoare → pentru a continua.
- Derulați până în partea de jos a Recenzie pagina, bifați caseta de selectare Recunosc că CloudFormation poate crea resurse IAMși alegeți Actualizați stiva.
Va dura aproximativ 3 minute pentru ca stiva să se actualizeze. După ce stiva a fost actualizată cu succes, vor fi create următoarele resurse:
- Subiect-B-Scrie-Rol – Un rol IAM cu permisiunea de a efectua operațiuni de scriere
Topic-B
. Politica sa de încredere permiteProducerApp-1-Role
Rolul IAM să-l asume. - Subiect-B-Citește-Rol – Un rol IAM cu permisiunea de a efectua operațiuni de citire
Topic-B
. Politica sa de încredere permiteConsumerApp-1-Role
șiConsumerApp-2-Role
Rolurile IAM să-l asume. În plus,ConsumerApp-1
șiConsumerApp-2
trebuie să aparțină și grupurilor de consumatori pe care le-ați specificat la actualizarea stivei pentru a efectua operațiuni de citireTopic-B
.
- Din stiva ieşiri fila, rețineți că
TopicBReadRoleARN
șiTopicBWriteRoleARN
valori.
Rulați aplicațiile producător și consumator fără a stabili cote
Aici, alergăm ProducerApp-1
, ConsumerApp-1
, și ConsumerApp-2
fără a le stabili cotele. Din pașii anteriori, veți avea nevoie BOOTSTRAP_BROKERS_IAM
valoare, Topic-B-Write-Role
ARN și Topic-B-Read-Role
ARN. Codul sursă al aplicațiilor client și versiunile acestora sunt disponibile în GitHub depozit.
Rulați aplicația ConsumerApp-1
Pentru a rula ConsumerApp-1
aplicație, parcurgeți următorii pași:
- Pe consola Amazon EC2, selectați
ConsumerApp-1
instanță EC2 și alegeți Conectați. - Pe Manager sesiune fila, alegeți Conectați.
- Rulați următoarele comenzi în noua filă care se deschide în browser:
- Pornește
ConsumerApp-1
aplicație pentru a începe să consume mesaje de laTopic-B
:
Puteți găsi cod sursă pe GitHub pentru referință. Detaliile parametrului liniei de comandă sunt după cum urmează:
- –servere-bootstrap – Punctul final IAM al brokerilor de bootstrap cluster MSK.
- –asume-rol-arn -
Topic-B-Read-Role
Rolul IAM ARN. Asumându-și acest rol,ConsumerApp-1
va citi mesajele din subiect. - -regiune – Regiunea pe care o utilizați.
- -nume-temă – Numele subiectului din care
ConsumerApp-1
va citi mesajele. Valoarea implicită esteTopic-B
. - -grup de consumatori – Numele grupului de consumatori pentru
ConsumerApp-1
, așa cum este specificat în timpul actualizării stivei. - –rol-sesiune-nume -
ConsumerApp-1
presupune căTopic-B-Read-Role
folosind Serviciul AWS Security Token (AWS STS) SDK.ConsumerApp-1
va folosi acest nume de sesiune de rol la apelareaassumeRole
Funcția. - –client-id – ID client pentru
ConsumerApp-1
. - –print-cota-consumator-metrics – Indicator care indică dacă valorile clientului ar trebui să fie tipărite pe terminal de către
ConsumerApp-1
. - –cw-dimension-name - Amazon CloudWatch numele parametrului care va fi folosit pentru a publica valorile de limitare a clienților din
ConsumerApp-1
. - –cw-dimension-valoare – Valoarea dimensiunii CloudWatch care va fi utilizată pentru a publica valorile de limitare a clienților din
ConsumerApp-1
. - –cw-namespace – Spațiul de nume unde
ConsumerApp-1
va publica valorile CloudWatch pentru a monitoriza limitarea.
- Dacă sunteți mulțumit de restul parametrilor, utilizați următoarea comandă și modificați
--assume-role-arn
și--region
conform mediului dvs.:
fetch-throttle-time-avg
și fetch-throttle-time-max
valorile clientului ar trebui să afișeze 0.0, indicând că nu are loc nicio limitare pentru ConsumerApp-1
. Rețineți că nu am stabilit cota de consum pentru ConsumerApp-1
inca. Lasă-l să curgă o vreme.
Rulați aplicația ConsumerApp-2
Pentru a rula ConsumerApp-2
aplicație, parcurgeți următorii pași:
- Pe consola Amazon EC2, selectați
ConsumerApp-2
instanță EC2 și alegeți Conectați. - Pe Manager sesiune fila, alegeți Conectați.
- Rulați următoarele comenzi în noua filă care se deschide în browser:
- Pornește
ConsumerApp-2
aplicație pentru a începe să consume mesaje de laTopic-B
:
Codul are detalii similare parametrilor liniei de comandă ca ConsumerApp-1
discutat anterior, cu excepția următoarelor:
- -grup de consumatori – Numele grupului de consumatori pentru
ConsumerApp-2
, așa cum este specificat în timpul actualizării stivei. - –rol-sesiune-nume -
ConsumerApp-2
presupune căTopic-B-Read-Role
folosind AWS STS SDK.ConsumerApp-2
va folosi acest nume de sesiune de rol la apelareaassumeRole
Funcția. - –client-id – ID client pentru
ConsumerApp-2
.
- Dacă sunteți mulțumit de restul parametrilor, utilizați următoarea comandă și modificați
--assume-role-arn
și--region
conform mediului dvs.:
fetch-throttle-time-avg
și fetch-throttle-time-max
valorile clientului ar trebui să afișeze 0.0, indicând că nu are loc nicio limitare pentru ConsumerApp-2
. Rețineți că nu am stabilit cota de consum pentru ConsumerApp-2
inca. Lasă-l să curgă o vreme.
Rulați aplicația ProducerApp-1
Pentru a rula ProducerApp-1
aplicație, parcurgeți următorii pași:
- Pe consola Amazon EC2, selectați
ProducerApp-1
instanță EC2 și alegeți Conectați. - Pe Manager sesiune fila, alegeți Conectați.
- Rulați următoarele comenzi în noua filă care se deschide în browser:
- Pornește
ProducerApp-1
aplicație pentru a începe să trimită mesajeTopic-B
:
Puteți găsi cod sursă pe GitHub pentru referință. Detaliile parametrului liniei de comandă sunt după cum urmează:
- –servere-bootstrap – Punctul final IAM al brokerilor de bootstrap cluster MSK.
- –asume-rol-arn -
Topic-B-Write-Role
Rolul IAM ARN. Asumându-și acest rol,ProducerApp-1
va scrie mesaje la subiect. - -nume-temă -
ProducerApp-1
va trimite mesaje la acest subiect. Valoarea implicită esteTopic-B
. - -regiune – Regiunea AWS pe care o utilizați.
- –num-mesaje – Numărul de mesaje
ProducerApp-1
cererea va fi trimisă la subiect. - –rol-sesiune-nume -
ProducerApp-1
presupune căTopic-B-Write-Role
folosind AWS STS SDK.ProducerApp-1
va folosi acest nume de sesiune de rol la apelareaassumeRole
Funcția. - –client-id – ID client al
ProducerApp-1
. - – tip producător -
ProducerApp-1
poate fi rulat fie sincronă or asincronă. Opțiunile sunt sincronizaţi or async. - –metric-cota-producătorului-tipărit – Flag care indică dacă valorile clientului ar trebui să fie tipărite pe terminal de către ProducerApp-1.
- –cw-dimension-name – Numele parametrului CloudWatch care va fi folosit pentru a publica valorile de throttling ale clientului ProducerApp-1.
- –cw-dimension-valoare – Valoarea dimensiunii CloudWatch care va fi utilizată pentru a publica valorile de limitare a clienților din ProducerApp-1.
- –cw-namespace – Spațiul de nume în care ProducerApp-1 va publica valorile CloudWatch pentru a monitoriza limitarea.
- Dacă sunteți mulțumit de restul parametrilor, utilizați următoarea comandă și modificați
--assume-role-arn
și--region
conform mediului dumneavoastră. Pentru a rula un producător Kafka sincron, acesta utilizează opțiunea--producer-type sync
:
Alternativ, utilizați --producer-type async
pentru a rula un producător asincron. Pentru mai multe detalii, consultați Trimitere asincronă.
produce-throttle-time-avg
și produce-throttle-time-max
valorile clientului ar trebui să afișeze 0.0, indicând că nu are loc nicio limitare pentru ProducerApp-1
. Rețineți că nu am stabilit cota de produse pentru ProducerApp-1
inca. Verifică asta ConsumerApp-1
și ConsumerApp-2
pot consuma mesaje și pot observa că nu sunt accelerate. Opriți aplicațiile client pentru consumatori și producători apăsând Ctrl + C în filele respective ale browserului.
Setați cote de producție și consum pentru aplicațiile client
Acum că am rulat aplicațiile pentru producători și consumatori fără cote, le-am stabilit cotele și le-am rulat din nou.
Deschideți Manager de sesiuni terminal pentru MSKAdminInstance
Instanța EC2 așa cum este descrisă mai devreme și rulați următoarele comenzi pentru a găsi configurația implicită a unuia dintre brokerii din clusterul MSK. Clusterele MSK sunt furnizate cu configurația implicită a cotelor Kafka.
Următoarea captură de ecran arată ecranul Broker-1
valori implicite pentru quota.consumer.default
și quota.producer.default
.
Configurarea cotei ProducerApp-1
Înlocuiți substituenții din toate comenzile din această secțiune cu valori care corespund contului dvs.
Conform diagramei de arhitectură discutată mai devreme, setați ProducerApp-1
produce cotă la 1024 de octeți/secundă. Pentru <ProducerApp-1 Client Id>
și <ProducerApp-1 Role Session>
, asigurați-vă că utilizați aceleași valori pe care le-ați folosit în timpul rulării ProducerApp-1
mai devreme (producerapp-1-client-id
și producerapp-1-role-session
, respectiv):
Verificați ProducerApp-1
produce cotă folosind următoarea comandă:
Puteți elimina ProducerApp-1
produce cotă utilizând următoarea comandă, dar nu rulați comanda deoarece vom testa cotele în continuare.
Configurarea cotei ConsumerApp-1
Înlocuiți substituenții din toate comenzile din această secțiune cu valori care corespund contului dvs.
Să setăm o cotă de consum de 5120 de octeți/secundă pentru ConsumerApp-1
. Pentru <ConsumerApp-1 Client Id>
și <ConsumerApp-1 Role Session>
, asigurați-vă că utilizați aceleași valori pe care le-ați folosit în timpul rulării ConsumerApp-1
mai devreme (consumerapp-1-client-id
și consumerapp-1-role-session
, respectiv):
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>
Verificați ConsumerApp-1
consumați cota folosind următoarea comandă:
Puteți elimina ConsumerApp-1
consumă cotă, folosind următoarea comandă, dar nu rulați comanda deoarece vom testa cotele în continuare.
Configurarea cotei ConsumerApp-2
Înlocuiți substituenții din toate comenzile din această secțiune cu valori care corespund contului dvs.
Să setăm o cotă de consum de 1024 de octeți/secundă pentru ConsumerApp-2
. Pentru <ConsumerApp-2 Client Id>
și <ConsumerApp-2 Role Session>
, asigurați-vă că utilizați aceleași valori pe care le-ați folosit în timpul rulării ConsumerApp-2
mai devreme (consumerapp-2-client-id
și consumerapp-2-role-session
, respectiv):
Verificați ConsumerApp-2
consumați cota folosind următoarea comandă:
Ca și în cazul ConsumerApp-1
, puteți elimina ConsumerApp-2
consumă cota folosind aceeași comandă cu ConsumerApp-2
detalii despre client și utilizator.
Rulați din nou aplicațiile producător și consumator după stabilirea cotelor
Să reluăm aplicațiile pentru a verifica efectul cotelor.
Reluați ProducerApp-1
Reluați ProducerApp-1
in sincronic mod cu aceeași comandă pe care ați folosit-o mai devreme. Următoarea captură de ecran ilustrează că atunci când ProducerApp-1
își atinge cota pe oricare dintre brokeri, the produce-throttle-time-avg
și produce-throttle-time-max client
valoarea valorii va fi peste 0.0. O valoare peste 0.0 indică acest lucru ProducerApp-1
este stropit. Permite ProducerApp-1
pentru a rula câteva secunde și apoi opriți-l utilizând Ctrl + C.
De asemenea, puteți testa efectul cotei de produse prin reluare ProducerApp-1
din nou in asincron mod (--producer-type async
). Similar cu o rulare sincronă, următoarea captură de ecran ilustrează atunci când ProducerApp-1
își atinge cota pe oricare dintre brokeri, the produce-throttle-time-avg
și produce-throttle-time-max
Valoarea valorilor clientului va fi peste 0.0. O valoare peste 0.0 indică acest lucru ProducerApp-1
este stropit. Permite asincron ProducerApp-1
a alerga o vreme.
În cele din urmă vei vedea o TimeoutException
precizând org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Când utilizați un asincron producător și trimițând mesaje la o rată mai mare decât poate accepta brokerul datorită cotei, mesajele vor fi puse mai întâi în coadă în memoria aplicației client. Clientul va rămâne în cele din urmă fără spațiu în buffer dacă rata de trimitere a mesajelor continuă să depășească rata de acceptare a mesajelor, determinând următorul Producer.send()
apel pentru a fi blocat. Producer.send()
va arunca în cele din urmă a TimeoutException
dacă întârzierea timeout nu este suficientă pentru a permite brokerului să ajungă din urmă aplicației producătorului. Stop ProducerApp-1
prin utilizarea Ctrl + C.
Reluați ConsumerApp-1
Reluați ConsumerApp-1
cu aceeași comandă pe care ați folosit-o mai devreme. Următoarea captură de ecran ilustrează că atunci când ConsumerApp-1
își atinge cota, the fetch-throttle-time-avg
și fetch-throttle-time-max client
valoarea valorii va fi peste 0.0. O valoare peste 0.0 indică acest lucru ConsumerApp-1
este stropit.
Permite ConsumerApp-1
pentru a rula câteva secunde și apoi opriți-l utilizând Ctrl + C.
Reluați ConsumerApp-2
Reluați ConsumerApp-2
cu aceeași comandă pe care ați folosit-o mai devreme. La fel, când ConsumerApp-2
își atinge cota, the fetch-throttle-time-avg
și fetch-throttle-time-max client
valoarea valorii va fi peste 0.0. O valoare mai sus 0.0 indică faptul că ConsumerApp-2
este stropit. Permite ConsumerApp-2
pentru a rula câteva secunde și apoi opriți-l apăsând Ctrl + C.
Valorile cotei clientului în Amazon CloudWatch
In Partea 1, am explicat că valorile clientului sunt valori expuse de clienții care se conectează la clusterele Kafka. Să examinăm valorile clientului în CloudWatch.
- Pe consola CloudWatch, alegeți Toate valorile.
- În Spații de nume personalizate, alegeți spațiul de nume pe care l-ați furnizat în timp ce rulați aplicațiile client.
- Alegeți numele dimensiunii și selectați
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
, șifetch-throttle-time-avg metrics
pentru toate aplicațiile.
Aceste valori indică comportamentul de throttling pentru ProducerApp-1
, ConsumerApp-1
, și ConsumerApp-2
aplicații testate cu configurațiile cotelor din secțiunea anterioară. Următoarele capturi de ecran indică limitarea ProducerApp-1
, ConsumerApp-1
, și ConsumerApp-2
pe baza cotelor de lățime de bandă a rețelei. ProducerApp-1
, ConsumerApp-1
, și ConsumerApp-2
aplicațiile își transmit valorile clientului respectiv către CloudWatch. Puteți găsi cod sursă pe GitHub pentru referință.
ID client securizat și numele sesiunii de rol
Am discutat despre cum să configurați cotele Kafka folosind aplicația ID client si autentificat utilizator principal. Când o aplicație client își asumă un rol IAM pentru a accesa subiectele Kafka pe un cluster MSK cu autentificarea IAM activată, aceasta este autentificată. utilizator principalul este reprezentat în următorul format (pentru mai multe informații, consultați identificatori IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Acesta conține numele sesiunii de rol (în acest caz, producerapp-1-role-session
) utilizat în aplicația client în timp ce își asumă un rol IAM prin SDK-ul AWS STS. Aplicația client cod sursă este disponibil pentru referință. The ID client este un șir de nume logic (de exemplu, producerapp-1-client-id
) care este configurat în codul aplicației de către echipa aplicației. Prin urmare, o aplicație poate uzurpa identitatea unei alte aplicații dacă obține ID client și numele sesiunii de rol al celeilalte aplicații și dacă are permisiunea de a-și asuma același rol IAM.
După cum se arată în diagrama arhitecturii, ConsumerApp-1
și ConsumerApp-2
sunt două aplicații client separate cu alocarea cotelor respective. Deoarece ambii au permisiunea de a-și asuma același rol IAM (Topic-B-Read-Role
) în contul demo, au voie să consume mesaje de la Topic-B
. Astfel, brokerii de cluster MSK îi disting pe baza lor ID-urile clientului și utilizatorii (care conțin respectivele lor numele sesiunii de rol valori). Dacă ConsumerApp-2
obține cumva ConsumerApp-1
numele sesiunii de rol și ID client, poate uzurpa identitatea ConsumerApp-1
prin specificarea ConsumerApp-1
numele sesiunii de rol și ID client în codul aplicației.
Sa presupunem ConsumerApp-1
utilizări consumerapp-1-client-id
și consumerapp-1-role-session
ca a lui ID client și numele sesiunii de rol, respectiv. Prin urmare, ConsumerApp-1's
autentificata utilizator principal va apărea după cum urmează atunci când presupune că Topic-B-Read-Role
Rolul IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
În mod similar, ConsumerApp-2
utilizări consumerapp-2-client-id
și consumerapp-2-role-session
ca a lui ID client și numele sesiunii de rol, respectiv. Prin urmare, ConsumerApp-2's
autentificata utilizator principal va apărea după cum urmează atunci când presupune că Topic-B-Read-Role
Rolul IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
obține ConsumerApp-1's
ID client și numele sesiunii de rol și le specifică în codul aplicației sale, brokerii de cluster MSK îl vor trata ca ConsumerApp-1
și vizualizați-l ID client as consumerapp-1-client-id
, și autentificat utilizator principal după cum urmează:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Asta permite ConsumerApp-2
pentru a consuma date din clusterul MSK la o rată maximă de 5120 de octeți pe secundă, în loc de 1024 de octeți pe secundă, conform alocarii sale inițiale de cotă. Prin urmare, ConsumerApp-1's
debitul va fi afectat negativ dacă ConsumerApp-2
rulează concomitent.
Arhitectură îmbunătățită
Poți să introduci Manager de secrete AWS și AWS Service Management Service (AWS KMS) în arhitectură pentru a securiza aplicațiile" ID-urile clientului și numele sesiunilor de rol. Pentru a oferi o guvernare mai puternică, ID-ul de client al aplicațiilor și numele sesiunii de rol trebuie să fie stocate ca secrete criptate în Managerul de secrete. Politicile de resurse IAM asociate cu secretele criptate și cu o cheie gestionată de client (CMK) KMS vor permite aplicațiilor să acceseze și să decripteze doar ID-ul clientului respectiv și numele sesiunii de rol. În acest fel, aplicațiile nu vor putea să acceseze reciproc ID-ul clientului și numele sesiunii de rol și să se uzurpare reciproc. Următoarea imagine arată arhitectura îmbunătățită.
Fluxul actualizat are următoarele etape:
- P1 -
ProducerApp-1
își recupereazăclient-id
șirole-session-name
secrete de la Secrets Manager - P2 -
ProducerApp-1
configurează secretulclient-id
asCLIENT_ID_CONFIG
în codul aplicației și presupuneTopic-B-Write-Role
(prin intermediul acestuiaProducerApp-1-Role
rol IAM) prin transmiterea secretuluirole-session-name
la AWS STS SDKassumeRole
apel de funcție - P3 - Cu
Topic-B-Write-Role
Rolul IAM asumat,ProducerApp-1
începe să trimită mesaje cătreTopic-B
- C1 -
ConsumerApp-1
șiConsumerApp-2
recuperează-le respectiveclient-id
șirole-session-name
secrete de la Secrets Manager - C2 -
ConsumerApp-1
șiConsumerApp-2
configurați secretul respectivclient-id
asCLIENT_ID_CONFIG
în codul aplicației lor și să presupunemTopic-B-Write-Role
(ViaConsumerApp-1-Role
șiConsumerApp-2-Role
rolurile IAM, respectiv) prin transmiterea secretului lorrole-session-name
în SDK-ul AWS STSassumeRole
apel de funcție - C3 - Cu
Topic-B-Read-Role
Rolul IAM asumat,ConsumerApp-1
șiConsumerApp-2
începe să consumi mesaje de laTopic-B
Consultați documentația pentru Manager de secrete AWS și AWS KMS pentru a obține o mai bună înțelegere a modului în care acestea se potrivesc în arhitectură.
Curățați resursele
Navigați la consola CloudFormation și ștergeți MSKStack
grămadă. Toate resursele create în timpul acestei postări vor fi șterse.
Concluzie
În această postare, am acoperit pași detaliați pentru a configura cotele Amazon MSK și am demonstrat efectul acestora prin exemple de aplicații client. În plus, am discutat despre cum puteți utiliza valorile client pentru a determina dacă o aplicație client este accelerată. De asemenea, am evidențiat o problemă potențială cu ID-urile clientului în text simplu și numele sesiunilor de rol. Vă recomandăm să implementați cotele Kafka cu Amazon MSK folosind Secrets Manager și AWS KMS conform diagramei de arhitectură revizuite pentru a asigura o arhitectură cu încredere zero.
Dacă aveți feedback sau întrebări despre această postare, inclusiv despre arhitectura revizuită, ne-ar face plăcere să auzim de la dvs. Sperăm că ți-a plăcut să citești această postare.
Despre autor
Vikas Bajaj este Senior Manager, Solutions Architects, Financial Services la Amazon Web Services. Cu peste două decenii de experiență în servicii financiare și de lucru cu afaceri native digitale, el consiliază clienții cu privire la designul produselor, foile de parcurs tehnologice și arhitecturile de aplicații.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- EVM Finance. Interfață unificată pentru finanțare descentralizată. Accesați Aici.
- Grupul Quantum Media. IR/PR amplificat. Accesați Aici.
- PlatoAiStream. Web3 Data Intelligence. Cunoștințe amplificate. Accesați Aici.
- Sursa: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :are
- :este
- :nu
- :Unde
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Capabil
- Despre Noi
- mai sus
- Accept
- acceptare
- acces
- Cont
- recunoaște
- peste
- adăuga
- plus
- Suplimentar
- În plus,
- După
- din nou
- TOATE
- alocare
- alocări
- permite
- permite
- de asemenea
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- și
- O alta
- Orice
- Apache
- Apache Kafka
- apărea
- aplicație
- aplicatii
- aproximativ
- arhitectură
- SUNT
- AS
- asociate
- asumat
- At
- autentificata
- Autentificare
- disponibil
- AWS
- Formarea AWS Cloud
- Lățime de bandă
- bazat
- BE
- deoarece
- fost
- înainte
- fiind
- Mai bine
- blocat
- Bootstrap
- atât
- De jos
- Cutie
- agent
- brokeri
- browser-ul
- tampon
- afaceri
- întreprinderi
- dar
- by
- apel
- denumit
- apel
- CAN
- caz
- CAT
- Captură
- provocând
- CD
- central
- Schimbare
- Modificări
- verifica
- Alege
- clasă
- client
- clientii
- Grup
- cod
- Comun
- Completă
- Calcula
- Concepte
- Configuraţie
- configurat
- Conectarea
- prin urmare
- Consoleze
- consuma
- consumator
- conține
- continua
- continuă
- continuarea
- Control
- acoperit
- crea
- a creat
- Crearea
- Curent
- client
- clienţii care
- de date
- Platforma de date
- zeci de ani
- decriptaţi
- Mod implicit
- întârziere
- Demo
- demonstrat
- În funcție
- descrie
- descris
- Amenajări
- detaliat
- detalii
- Determina
- determină
- Dimensiune
- discutat
- Afişa
- distinge
- documentaţie
- Descarca
- două
- în timpul
- fiecare
- Mai devreme
- ecou
- efect
- oricare
- permite
- activat
- permite
- criptate
- Punct final
- aplica
- sporită
- asigura
- Intrați
- Mediu inconjurator
- Erori
- Eter (ETH)
- în cele din urmă
- examina
- exemplu
- depăși
- Cu excepția
- experienţă
- a explicat
- explicație
- exporturile
- expus
- feedback-ul
- puțini
- Figura
- Fișier
- Fişiere
- financiar
- Servicii financiare
- Găsi
- First
- potrivi
- debit
- următor
- urmează
- Pentru
- format
- patru
- din
- funcţie
- În plus
- obține
- merge
- GitHub
- guvernare
- mai mare
- grup
- Grupului
- fericit
- Avea
- he
- auzi
- la nivel înalt
- Evidențiat
- speranţă
- gazdă
- Gazdele
- Cum
- Cum Pentru a
- HTML
- http
- HTTPS
- IAM
- ID
- Identitate
- ID-uri
- if
- ilustrează
- imagine
- afectate
- implementarea
- Punere în aplicare a
- in
- Inclusiv
- indica
- indică
- indicând
- individ
- informații
- instanță
- integrală
- în
- introduce
- introdus
- ISN
- problema
- IT
- ESTE
- Java
- jpg
- Kafka
- Cheie
- cunoscut
- LIMITĂ
- Linie
- linii
- Listă
- logic
- face
- gestionate
- administrare
- manager
- maxim
- Mai..
- măsurat
- Memorie
- mesaje
- Metrici
- minute
- mod
- modifica
- monitor
- mai mult
- MS
- mult
- multiplu
- trebuie sa
- nume
- nume
- Navigaţi
- Navigare
- Nevoie
- negativ
- reţea
- Nou
- următor
- Nu.
- notat
- Înștiințare..
- număr
- obține
- care apar
- of
- on
- ONE
- afară
- deschide
- operat
- Operațiuni
- Opțiune
- Opţiuni
- or
- comandă
- original
- Altele
- afară
- peste
- ambalate
- pagină
- pâine
- parametru
- parametrii
- parte
- Trecut
- Care trece
- cale
- procent
- efectua
- performanță
- permisiune
- Text simplu
- platformă
- Plato
- Informații despre date Platon
- PlatoData
- Punct
- puncte
- Politicile
- Politica
- Post
- potenţial
- presare
- împiedica
- precedent
- în prealabil
- Principal
- privat
- prelucrare
- produce
- producător
- Produs
- design de produs
- proprietăţi
- furniza
- prevăzut
- public
- publica
- Întrebări
- rată
- mai degraba
- aTINGE
- Citeste
- Citind
- recomanda
- recomandat
- menționat
- regiune
- minte
- scoate
- înlocui
- depozit
- reprezentate
- solicita
- cereri de
- necesar
- resursă
- Resurse
- respectiv
- respectiv
- REST
- foi de parcurs
- Rol
- rolurile
- Alerga
- funcţionare
- s
- acelaşi
- satisfăcut
- mulțumit cu
- capturi de ecran
- sdk
- Al doilea
- secunde
- Secret
- Secțiune
- sigur
- securitate
- token de securitate
- vedea
- trimite
- trimitere
- senior
- distinct
- serie
- Servicii
- sesiune
- set
- instalare
- setări
- să
- indicat
- Emisiuni
- asemănător
- asemănător
- întrucât
- soluţii
- Sursă
- cod sursă
- Spaţiu
- specific
- specificată
- stivui
- Stadiile
- Începe
- început
- Pas
- paşi
- Stop
- stocate
- de streaming
- Şir
- puternic
- subrețele
- ulterior
- Reușit
- astfel de
- suficient
- furnizat
- Sprijină
- Lua
- echipă
- Tehnologia
- șablon
- şabloane
- Terminal
- test
- testat
- Testarea
- decât
- acea
- Sursa
- lor
- Lor
- apoi
- prin urmare
- ei
- acest
- trei
- Prin
- debit
- timp
- la
- semn
- subiect
- subiecte
- trata
- Încredere
- Două
- tip
- Tipuri
- înţelegere
- Actualizează
- actualizat
- actualizarea
- utilizare
- utilizat
- Utilizator
- utilizatorii
- utilizări
- folosind
- valoare
- Valori
- verifica
- de
- Vizualizare
- a fost
- Cale..
- we
- web
- servicii web
- BINE
- cand
- dacă
- care
- în timp ce
- voi
- cu
- fără
- de lucru
- scrie
- încă
- tu
- Ta
- zephyrnet