Le quote Kafka sono parte integrante dei cluster Kafka multi-tenant. Impediscono che le prestazioni del cluster Kafka vengano influenzate negativamente da applicazioni dal comportamento inadeguato che consumano eccessivamente le risorse del cluster. Inoltre, consentono alla piattaforma centrale di streaming dati di essere gestita come piattaforma multi-tenant e utilizzata da applicazioni downstream e upstream su più linee di business. Kafka supporta due tipi di quote: quote di larghezza di banda della rete ed richiedere quote tariffarie. Le quote di larghezza di banda della rete definiscono le soglie di velocità in byte, ad esempio la quantità di dati che le applicazioni client possono produrre e consumare da ogni singolo broker in un cluster Kafka misurata in byte al secondo. Le quote tariffarie delle richieste limitano la percentuale di tempo che ogni singolo broker impiega nell'elaborazione delle richieste delle applicazioni client. A seconda della configurazione, le quote Kafka possono essere impostate per utenti specifici, ID client specifici o entrambi.
In Parte 1 di questa serie in due parti, abbiamo discusso i concetti su come applicare le quote Kafka Streaming gestito da Amazon per Apache Kafka (Amazon MSK) durante l'utilizzo Gestione dell'identità e dell'accesso di AWS (IAM) controllo degli accessi.
In questo post ti guideremo attraverso l'implementazione passo passo della configurazione delle quote Kafka in un cluster MSK mentre utilizzi il controllo degli accessi IAM e li testiamo tramite applicazioni client di esempio.
Panoramica della soluzione
La figura seguente, che abbiamo introdotto per la prima volta Parte 1, illustra come le applicazioni client Kafka (ProducerApp-1
, ConsumerApp-1
e ConsumerApp-2
) accesso Topic-B
nel cluster MSK presupponendo ruoli IAM di scrittura e lettura. Ogni applicazione client produttore e consumatore ha una quota che determina la quantità di dati che possono produrre o consumare in byte/secondo. IL ProducerApp-1
la quota gli consente di produrre fino a 1024 byte/secondo per broker. Allo stesso modo, il ConsumerApp-1
ed ConsumerApp-2
le quote consentono loro di consumare rispettivamente 5120 e 1024 byte/secondo per broker. Di seguito è riportata una breve spiegazione del flusso mostrato nel diagramma dell'architettura:
- P1 -
ProducerApp-1
(tramite la suaProducerApp-1-Role
ruolo IAM) assume ilTopic-B-Write-Role
Ruolo IAM a cui inviare i messaggiTopic-B
- P2 - Con il
Topic-B-Write-Role
Ruolo IAM assunto,ProducerApp-1
inizia a inviare messaggi aTopic-B
- C1 -
ConsumerApp-1
(tramite la suaConsumerApp-1-Role
ruolo IAM) eConsumerApp-2
(tramite la suaConsumerApp-2-Role
ruolo IAM) assumere ilTopic-B-Read-Role
Ruolo IAM da cui leggere i messaggiTopic-B
- C2 - Con il
Topic-B-Read-Role
Ruolo IAM assunto,ConsumerApp-1
edConsumerApp-2
iniziare a consumare messaggi daTopic-B
Tieni presente che questo post utilizza il file Interfaccia della riga di comando di AWS (AWS CLI), AWS CloudFormazione modelli e il Console di gestione AWS per il provisioning e la modifica delle risorse AWS e le risorse fornite verranno fatturate sul tuo account AWS.
I passaggi di alto livello sono i seguenti:
- Effettua il provisioning di un cluster MSK con controllo dell'accesso IAM e Cloud di calcolo elastico di Amazon (Amazon EC2) per le applicazioni client.
- Creare
Topic-B
sul cluster MSK. - Crea ruoli IAM a cui le applicazioni client possono accedere
Topic-B
. - Esegui le applicazioni produttore e consumatore senza impostare quote.
- Configurare le quote di produzione e consumo per le applicazioni client.
- Eseguire nuovamente le applicazioni dopo aver impostato le quote.
Prerequisiti
Si consiglia di leggere Parte 1 di questa serie prima di continuare. Per iniziare, è necessario quanto segue:
- Un account AWS a cui ci si riferirà come account demo in questo post, presupponendo che il suo ID account lo sia
1111 1111 1111
- Autorizzazioni per creare, eliminare e modificare le risorse AWS nell'account demo
Effettua il provisioning di un cluster MSK con controllo degli accessi IAM e istanze EC2
Questo passaggio prevede il provisioning di un cluster MSK con controllo dell'accesso IAM in un VPC nell'account demo. Inoltre, creiamo quattro istanze EC2 per apportare modifiche alla configurazione del cluster MSK e delle applicazioni client produttore e consumatore host.
Distribuisci lo stack CloudFormation
- Clona il file Repository GitHub per scaricare i file modello CloudFormation e le applicazioni client di esempio:
- Nella console AWS CloudFormation, scegli Stacks nel pannello di navigazione.
- Scegli Crea stack.
- Nel Preparare il modello, selezionare Il modello è pronto.
- Nel Fonte del modello, selezionare Carica un file modello.
- Carica il
cfn-msk-stack-1.yaml
file daamazon-msk-kafka-quotas/cfn-templates
directory, quindi scegli Avanti. - Nel Nome dello stack, accedere
MSKStack
. - Lascia i parametri come predefiniti e scegli Avanti.
- Scorri fino in fondo al Configura le opzioni di stack pagina e scegli Avanti per continuare.
- Scorri fino in fondo al Review pagina, selezionare la casella di controllo Riconosco che CloudFormation può creare risorse IAMe scegli Invio.
Il completamento dello stack richiederà circa 30 minuti. Dopo che lo stack è stato creato correttamente, verranno create le seguenti risorse:
- Un VPC con tre sottoreti private e una sottorete pubblica
- Un cluster MSK con tre broker con controllo dell'accesso IAM abilitato
- Un'istanza EC2 chiamata
MSKAdminInstance
per modificare le impostazioni del cluster MSK nonché creare e modificare le risorse AWS - Istanze EC2 per
ProducerApp-1
,ConsumerApp-1
eConsumerApp-2
, uno per ogni applicazione client - Un ruolo IAM separato per ogni istanza EC2 che ospita l'applicazione client, come mostrato nel diagramma dell'architettura
- Dalla pila Uscite scheda, notare il
MSKClusterArn
valore.
Crea un argomento nel cluster MSK
Creare Topic-B
sul cluster MSK, completare i seguenti passaggi:
- Nella console Amazon EC2, accedi all'elenco delle istanze EC2 in esecuzione.
- Seleziona il
MSKAdminInstance
Istanza EC2 e scegli Connettiti. - Sulla Session Manager scheda, scegliere Connettiti.
- Esegui i seguenti comandi nella nuova scheda che si apre nel browser:
- Imposta la variabile di ambiente in modo che punti all'endpoint IAM dei broker MSK Cluster:
- Prendi nota del valore di
BOOTSTRAP_BROKERS_IAM
. - Esegui il seguente comando della CLI di Kafka per creare
Topic-B
sul cluster MSK:
Poiché al cluster MSK viene fornito il controllo dell'accesso IAM, l'opzione --command-config
punta a config_iam.properties
, che contiene le proprietà richieste per il controllo degli accessi IAM, creato da MSKStack
Stack di CloudFormation.
Quando esegui i comandi della CLI di Kafka potrebbero essere visualizzati i seguenti avvisi, ma puoi ignorarli:
- Per verificare che
Topic-B
è stato creato, elenca tutti gli argomenti:
Crea ruoli IAM per consentire alle applicazioni client di accedere all'argomento B
Questo passaggio prevede la creazione Topic-B-Write-Role
ed Topic-B-Read-Role
come mostrato nel diagramma dell'architettura. Topic-B-Write-Role
abilita le operazioni di scrittura su Topic-B
, e può essere assunto dal ProducerApp-1
. In modo simile, il ConsumerApp-1
ed ConsumerApp-2
può assumere Topic-B-Read-Role
su cui eseguire operazioni di lettura Topic-B
. Per eseguire operazioni di lettura su Topic-B
, ConsumerApp-1
ed ConsumerApp-2
devono appartenere anche ai gruppi di consumatori specificati durante la MSKStack
aggiornamento dello stack nel passaggio successivo.
Creare i ruoli con i seguenti passaggi:
- Nella console AWS CloudFormation, scegli Stacks nel pannello di navigazione.
- Seleziona
MSKStack
e scegli Aggiornanento. - Nel Preparare il modello, seleziona Sostituisci modello corrente.
- Nel Fonte del modello, selezionare Carica un file modello.
- Carica il
cfn-msk-stack-2.yaml
file daamazon-msk-kafka-quotas/cfn-templates
directory, quindi scegli Avanti. - Fornire i seguenti parametri di stack aggiuntivi:
-
- Nel Argomento B ARN, Inserisci il
Topic-B
RNA.
- Nel Argomento B ARN, Inserisci il
L'ARN deve essere formattato come arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Utilizza il nome e l'UUID del cluster dall'ARN del cluster MSK annotato in precedenza e fornisci la tua regione AWS. Per ulteriori informazioni, fare riferimento a Controllo degli accessi IAM per Amazon MSK.
-
- Nel ConsumerApp-1 Nome del gruppo di consumatori, accedere
ConsumerApp-1
gruppo di consumatori ARN.
- Nel ConsumerApp-1 Nome del gruppo di consumatori, accedere
Deve essere formattato come arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Nel ConsumerApp-2 Nome del gruppo di consumatori, accedere
ConsumerApp-2
gruppo di consumatori ARN.
- Nel ConsumerApp-2 Nome del gruppo di consumatori, accedere
Utilizza un formato simile all'ARN precedente.
- Scegli Avanti per continuare.
- Scorri fino in fondo al Configura pila pagina delle opzioni e scegli Avanti per continuare.
- Scorri fino in fondo al Review pagina, selezionare la casella di controllo Riconosco che CloudFormation può creare risorse IAMe scegli Aggiorna pila.
L'aggiornamento dello stack richiederà circa 3 minuti. Dopo che lo stack è stato aggiornato correttamente, verranno create le seguenti risorse:
- Argomento-B-Scrittura-Ruolo – Un ruolo IAM con autorizzazione per eseguire operazioni di scrittura
Topic-B
. La sua politica di fiducia consente ilProducerApp-1-Role
Ruolo IAM per assumerlo. - Argomento-B-Lettura-Ruolo – Un ruolo IAM con autorizzazione per eseguire operazioni di lettura
Topic-B
. La sua politica di fiducia consente ilConsumerApp-1-Role
edConsumerApp-2-Role
Ruoli IAM per assumerlo. Inoltre,ConsumerApp-1
edConsumerApp-2
deve appartenere anche ai gruppi di consumer specificati durante l'aggiornamento dello stack su cui eseguire operazioni di letturaTopic-B
.
- Dalla pila Uscite scheda, notare il
TopicBReadRoleARN
edTopicBWriteRoleARN
valori.
Esegui le applicazioni produttore e consumatore senza impostare quote
Ecco, corriamo ProducerApp-1
, ConsumerApp-1
e ConsumerApp-2
senza fissare le proprie quote. Dai passaggi precedenti, avrai bisogno BOOTSTRAP_BROKERS_IAM
valore, Topic-B-Write-Role
ARN, e Topic-B-Read-Role
ARN. Il codice sorgente delle applicazioni client e le relative versioni in pacchetto sono disponibili nel file Repository GitHub.
Eseguire l'applicazione ConsumerApp-1
Per eseguire il ConsumerApp-1
applicazione, completare i seguenti passaggi:
- Nella console Amazon EC2, seleziona il file
ConsumerApp-1
Istanza EC2 e scegli Connettiti. - Sulla Session Manager scheda, scegliere Connettiti.
- Esegui i seguenti comandi nella nuova scheda che si apre nel browser:
- Corri il
ConsumerApp-1
applicazione da cui iniziare a consumare messaggiTopic-B
:
È possibile trovare il codice sorgente su GitHub come riferimento. I dettagli del parametro della riga di comando sono i seguenti:
- –server-bootstrap – Endpoint IAM dei broker di bootstrap del cluster MSK.
- –assumere-ruolo-arn -
Topic-B-Read-Role
ARN del ruolo IAM. Assumendo questo ruolo,ConsumerApp-1
leggerà i messaggi dall'argomento. - -regione – Regione che stai utilizzando.
- –nome-argomento – Nome dell'argomento da cui
ConsumerApp-1
leggerà i messaggi. L'impostazione predefinita èTopic-B
. - –gruppo-di-consumatori – Nome del gruppo di consumatori per
ConsumerApp-1
, come specificato durante l'aggiornamento dello stack. - –nome-sessione-ruolo -
ConsumerApp-1
assume ilTopic-B-Read-Role
usando il Servizio token di sicurezza AWS SDK (AWS STS).ConsumerApp-1
utilizzerà questo nome di sessione del ruolo quando chiamerà ilassumeRole
funzione. - -Identificativo cliente – ID cliente per
ConsumerApp-1
. - –metriche-quote-consumatori-stampa – Flag che indica se le metriche del client devono essere stampate sul terminale
ConsumerApp-1
. - –cw-nome-dimensione - Amazon Cloud Watch nome della dimensione che verrà utilizzato per pubblicare i parametri di limitazione del client
ConsumerApp-1
. - –cw-valore-dimensione – Valore della dimensione CloudWatch che verrà utilizzato per pubblicare i parametri di limitazione del client
ConsumerApp-1
. - –cw-spazio dei nomi – Spazio dei nomi dove
ConsumerApp-1
pubblicherà i parametri CloudWatch per monitorare la limitazione.
- Se sei soddisfatto del resto dei parametri, utilizza il seguente comando e modifica
--assume-role-arn
ed--region
secondo il tuo ambiente:
Il fetch-throttle-time-avg
ed fetch-throttle-time-max
i parametri client dovrebbero visualizzare 0.0, a indicare che non si sta verificando alcuna limitazione ConsumerApp-1
. Ricorda che non abbiamo impostato la quota di consumo per ConsumerApp-1
Ancora. Lascialo funzionare per un po'.
Eseguire l'applicazione ConsumerApp-2
Per eseguire il ConsumerApp-2
applicazione, completare i seguenti passaggi:
- Nella console Amazon EC2, seleziona il file
ConsumerApp-2
Istanza EC2 e scegli Connettiti. - Sulla Session Manager scheda, scegliere Connettiti.
- Esegui i seguenti comandi nella nuova scheda che si apre nel browser:
- Corri il
ConsumerApp-2
applicazione da cui iniziare a consumare messaggiTopic-B
:
Il codice ha dettagli simili sui parametri della riga di comando come ConsumerApp-1
discusso in precedenza, ad eccezione di quanto segue:
- –gruppo-di-consumatori – Nome del gruppo di consumatori per
ConsumerApp-2
, come specificato durante l'aggiornamento dello stack. - –nome-sessione-ruolo -
ConsumerApp-2
assume ilTopic-B-Read-Role
utilizzando l'SDK AWS STS.ConsumerApp-2
utilizzerà questo nome di sessione del ruolo quando chiamerà ilassumeRole
funzione. - -Identificativo cliente – ID cliente per
ConsumerApp-2
.
- Se sei soddisfatto del resto dei parametri, utilizza il seguente comando e modifica
--assume-role-arn
ed--region
secondo il tuo ambiente:
Il fetch-throttle-time-avg
ed fetch-throttle-time-max
i parametri client dovrebbero visualizzare 0.0, a indicare che non si sta verificando alcuna limitazione ConsumerApp-2
. Ricorda che non abbiamo impostato la quota di consumo per ConsumerApp-2
Ancora. Lascialo funzionare per un po'.
Esegui l'applicazione ProducerApp-1
Per eseguire il ProducerApp-1
applicazione, completare i seguenti passaggi:
- Nella console Amazon EC2, seleziona il file
ProducerApp-1
Istanza EC2 e scegli Connettiti. - Sulla Session Manager scheda, scegliere Connettiti.
- Esegui i seguenti comandi nella nuova scheda che si apre nel browser:
- Corri il
ProducerApp-1
applicazione a cui iniziare a inviare messaggiTopic-B
:
È possibile trovare il codice sorgente su GitHub come riferimento. I dettagli del parametro della riga di comando sono i seguenti:
- –server-bootstrap – Endpoint IAM dei broker di bootstrap del cluster MSK.
- –assumere-ruolo-arn -
Topic-B-Write-Role
ARN del ruolo IAM. Assumendo questo ruolo,ProducerApp-1
scriverà messaggi sull'argomento. - –nome-argomento -
ProducerApp-1
invierà messaggi a questo argomento. L'impostazione predefinita èTopic-B
. - -regione – Regione AWS che stai utilizzando.
- –num-messaggi – Numero di messaggi il
ProducerApp-1
l'applicazione invierà all'argomento. - –nome-sessione-ruolo -
ProducerApp-1
assume ilTopic-B-Write-Role
utilizzando l'SDK AWS STS.ProducerApp-1
utilizzerà questo nome di sessione del ruolo quando chiamerà ilassumeRole
funzione. - -Identificativo cliente – ID cliente di
ProducerApp-1
. - –tipo di produttore -
ProducerApp-1
può essere eseguito sincrono or in modo asincrono. Le opzioni sono sync or async. - –metriche-delle-quote-del-produttore-di-stampa – Flag che indica se le metriche del client devono essere stampate sul terminale ProducerApp-1.
- –cw-nome-dimensione – Nome della dimensione CloudWatch che verrà utilizzato per pubblicare i parametri di limitazione del client ProducerApp-1.
- –cw-valore-dimensione – Valore della dimensione CloudWatch che verrà utilizzato per pubblicare i parametri di limitazione del client ProducerApp-1.
- –cw-spazio dei nomi – Lo spazio dei nomi dove ProducerApp-1 pubblicherà i parametri CloudWatch per monitorare la limitazione.
- Se sei soddisfatto del resto dei parametri, utilizza il seguente comando e modifica
--assume-role-arn
ed--region
secondo il tuo ambiente. Per eseguire un produttore Kafka sincrono, utilizza l'opzione--producer-type sync
:
In alternativa, usa --producer-type async
per eseguire un produttore asincrono. Per ulteriori dettagli, fare riferimento a Invio asincrono.
Il produce-throttle-time-avg
ed produce-throttle-time-max
i parametri client dovrebbero visualizzare 0.0, a indicare che non si sta verificando alcuna limitazione ProducerApp-1
. Ricorda che non abbiamo fissato una quota di produzione per ProducerApp-1
Ancora. Controllalo ConsumerApp-1
ed ConsumerApp-2
può consumare messaggi e notare che non sono limitati. Interrompere le applicazioni client del consumatore e del produttore premendo Ctrl + C nelle rispettive schede del browser.
Imposta quote di produzione e consumo per le applicazioni client
Ora che abbiamo eseguito le applicazioni produttore e consumatore senza quote, impostiamo le rispettive quote e le eseguiamo nuovamente.
Aprire il Responsabile delle sessioni terminale per il MSKAdminInstance
EC2 come descritto in precedenza ed esegui i seguenti comandi per trovare la configurazione predefinita di uno dei broker nel cluster MSK. Il provisioning dei cluster MSK viene eseguito con la configurazione delle quote Kafka predefinita.
La seguente schermata mostra il Broker-1
valori predefiniti per quota.consumer.default
ed quota.producer.default
.
Configurazione della quota ProducerApp-1
Sostituisci i segnaposto in tutti i comandi di questa sezione con valori che corrispondono al tuo account.
Secondo il diagramma dell'architettura discusso in precedenza, impostare il file ProducerApp-1
produrre una quota di 1024 byte/secondo. Per <ProducerApp-1 Client Id>
ed <ProducerApp-1 Role Session>
, assicurati di utilizzare gli stessi valori utilizzati durante l'esecuzione ProducerApp-1
prima (producerapp-1-client-id
ed producerapp-1-role-session
, rispettivamente):
Verifica il file ProducerApp-1
produrre quota utilizzando il seguente comando:
È possibile rimuovere il ProducerApp-1
produrre quota utilizzando il seguente comando, ma non eseguire il comando poiché testeremo le quote in seguito.
Configurazione della quota ConsumerApp-1
Sostituisci i segnaposto in tutti i comandi di questa sezione con valori che corrispondono al tuo account.
Impostiamo una quota di consumo di 5120 byte/secondo per ConsumerApp-1
. For
<ConsumerApp-1 Client Id>
ed <ConsumerApp-1 Role Session>
, assicurati di utilizzare gli stessi valori utilizzati durante l'esecuzione ConsumerApp-1
prima (consumerapp-1-client-id
ed consumerapp-1-role-session
, rispettivamente):
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 il file ConsumerApp-1
consumare la quota utilizzando il seguente comando:
È possibile rimuovere il ConsumerApp-1
consumare la quota, utilizzando il comando seguente, ma non eseguire il comando poiché testeremo le quote in seguito.
Configurazione della quota ConsumerApp-2
Sostituisci i segnaposto in tutti i comandi di questa sezione con valori che corrispondono al tuo account.
Impostiamo una quota di consumo di 1024 byte/secondo per ConsumerApp-2
. For
<ConsumerApp-2 Client Id>
ed <ConsumerApp-2 Role Session>
, assicurati di utilizzare gli stessi valori utilizzati durante l'esecuzione ConsumerApp-2
prima (consumerapp-2-client-id
ed consumerapp-2-role-session
, rispettivamente):
Verifica il file ConsumerApp-2
consumare la quota utilizzando il seguente comando:
Come con ConsumerApp-1
, puoi rimuovere il file ConsumerApp-2
consumare la quota utilizzando lo stesso comando con ConsumerApp-2
dettagli del cliente e dell'utente.
Eseguire nuovamente le applicazioni del produttore e del consumatore dopo aver impostato le quote
Rieseguiamo le applicazioni per verificare l'effetto delle quote.
Eseguire nuovamente ProducerApp-1
Rerun ProducerApp-1
in sincrono mode con lo stesso comando utilizzato in precedenza. Lo screenshot seguente illustra quando ProducerApp-1
raggiunge la sua quota su uno qualsiasi dei broker, il produce-throttle-time-avg
ed produce-throttle-time-max client
il valore delle metriche sarà superiore a 0.0. Un valore superiore a 0.0 lo indica ProducerApp-1
è strozzato. Permettere ProducerApp-1
per funzionare per alcuni secondi e quindi interromperlo utilizzando Ctrl + C.
Puoi anche testare l'effetto della quota di produzione rieseguendo ProducerApp-1
di nuovo in asincrono modalità (--producer-type async
). Simile a una corsa sincrona, lo screenshot seguente illustra quando ProducerApp-1
raggiunge la sua quota su uno qualsiasi dei broker, il produce-throttle-time-avg
ed produce-throttle-time-max
il valore delle metriche del cliente sarà superiore a 0.0. Un valore superiore a 0.0 lo indica ProducerApp-1
è strozzato. Consenti asincrono ProducerApp-1
correre per un po'.
Alla fine vedrai a TimeoutException
affermando org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Quando si utilizza un file asincrono produttore e inviando messaggi a una velocità superiore a quella che il broker può accettare a causa della quota, i messaggi verranno prima accodati nella memoria dell'applicazione client. Il client finirà per esaurire lo spazio nel buffer se la velocità di invio dei messaggi continua a superare la velocità di accettazione dei messaggi, causando il successivo Producer.send()
chiamata da bloccare. Producer.send()
alla fine lancerà a TimeoutException
se il ritardo di timeout non è sufficiente per consentire al broker di recuperare il ritardo con l'applicazione del produttore. Fermare ProducerApp-1
utilizzando Ctrl + C.
Eseguire nuovamente ConsumerApp-1
Rerun ConsumerApp-1
con lo stesso comando che hai usato prima. Lo screenshot seguente illustra quando ConsumerApp-1
raggiunge la sua quota, il fetch-throttle-time-avg
ed fetch-throttle-time-max client
il valore delle metriche sarà superiore a 0.0. Un valore superiore a 0.0 lo indica ConsumerApp-1
è strozzato.
Consentire ConsumerApp-1
per funzionare per alcuni secondi e quindi interromperlo utilizzando Ctrl + C.
Eseguire nuovamente ConsumerApp-2
Rerun ConsumerApp-2
con lo stesso comando che hai usato prima. Allo stesso modo, quando ConsumerApp-2
raggiunge la sua quota, il fetch-throttle-time-avg
ed fetch-throttle-time-max client
il valore delle metriche sarà superiore 0.0. Un valore superiore 0.0 indica che ConsumerApp-2
è strozzato. Permettere ConsumerApp-2
per funzionare per alcuni secondi, quindi interromperlo premendo Ctrl + C.
Parametri delle quote client in Amazon CloudWatch
In Parte 1, abbiamo spiegato che le metriche client sono metriche esposte dai client che si connettono ai cluster Kafka. Esaminiamo i parametri client in CloudWatch.
- Nella console CloudWatch, scegli Tutte le metriche.
- Sotto Spazi dei nomi personalizzati, scegli lo spazio dei nomi fornito durante l'esecuzione delle applicazioni client.
- Scegli il nome della dimensione e seleziona
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
efetch-throttle-time-avg metrics
per tutte le applicazioni.
Questi parametri indicano il comportamento di limitazione per ProducerApp-1
, ConsumerApp-1
e ConsumerApp-2
applicazioni testate con le configurazioni delle quote nella sezione precedente. Le schermate seguenti indicano la limitazione di ProducerApp-1
, ConsumerApp-1
e ConsumerApp-2
in base alle quote di larghezza di banda della rete. ProducerApp-1
, ConsumerApp-1
e ConsumerApp-2
le applicazioni forniscono i rispettivi parametri client a CloudWatch. Puoi trovare il codice sorgente su GitHub come riferimento.
Proteggere l'ID client e il nome della sessione del ruolo
Abbiamo discusso come configurare le quote Kafka utilizzando quelle di un'applicazione Identificativo cliente e autenticato Utente principale. Quando un'applicazione client assume un ruolo IAM per accedere agli argomenti Kafka su un cluster MSK con l'autenticazione IAM abilitata, viene autenticata Utente principale è rappresentato nel seguente formato (per ulteriori informazioni, fare riferimento a Identificatori IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Contiene il file nome della sessione del ruolo (in questo caso, producerapp-1-role-session
) utilizzato nell'applicazione client assumendo un ruolo IAM tramite l'SDK AWS STS. L'applicazione client codice sorgente è disponibile per il vostro riferimento. IL Identificativo cliente è una stringa di nome logico (ad esempio, producerapp-1-client-id
) configurato nel codice dell'applicazione dal team dell'applicazione. Pertanto, un'applicazione può rappresentare un'altra applicazione se ottiene il file Identificativo cliente ed nome della sessione del ruolo dell'altra applicazione e se dispone dell'autorizzazione per assumere lo stesso ruolo IAM.
Come mostrato nel diagramma dell'architettura, ConsumerApp-1
ed ConsumerApp-2
sono due applicazioni client separate con le rispettive allocazioni di quota. Poiché entrambi dispongono dell'autorizzazione per assumere lo stesso ruolo IAM (Topic-B-Read-Role
) nell'account demo, possono consumare messaggi da Topic-B
. Pertanto, i broker di cluster MSK li distinguono in base al loro ID cliente ed utenti (che contengono i rispettivi nome della sessione del ruolo i valori). Se ConsumerApp-2
in qualche modo ottiene il ConsumerApp-1
nome della sessione del ruolo ed Identificativo cliente, può impersonare ConsumerApp-1
specificando il ConsumerApp-1
nome della sessione del ruolo ed Identificativo cliente nel codice dell'applicazione.
Assumiamo ConsumerApp-1
usa consumerapp-1-client-id
ed consumerapp-1-role-session
come suo Identificativo cliente ed nome della sessione del ruolo, rispettivamente. Perciò, ConsumerApp-1's
autenticato Utente principale apparirà come segue quando assume il Topic-B-Read-Role
Ruolo IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Analogamente, ConsumerApp-2
usa consumerapp-2-client-id
ed consumerapp-2-role-session
come suo Identificativo cliente ed nome della sessione del ruolo, rispettivamente. Perciò, ConsumerApp-2's
autenticato Utente principale apparirà come segue quando assume il Topic-B-Read-Role
Ruolo IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
ottiene ConsumerApp-1's
Identificativo cliente ed nome della sessione del ruolo e li specifica nel codice dell'applicazione, i broker del cluster MSK lo tratteranno come ConsumerApp-1
e visualizzarlo Identificativo cliente as consumerapp-1-client-id
e quello autenticato Utente principale come segue:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Questo permette ConsumerApp-2
per consumare dati dal cluster MSK a una velocità massima di 5120 byte al secondo anziché 1024 byte al secondo come da allocazione della quota originale. Di conseguenza, ConsumerApp-1's
il throughput sarà influenzato negativamente se ConsumerApp-2
funziona contemporaneamente.
Architettura migliorata
Puoi presentarti AWS Secrets Manager ed Servizio di gestione delle chiavi AWS (AWS KMS) nell'architettura per proteggere le applicazioni' ID cliente ed nomi delle sessioni di ruolo. Per fornire una governance più forte, l'ID client delle applicazioni e il nome della sessione del ruolo devono essere archiviati come segreti crittografati in Secrets Manager. Le policy delle risorse IAM associate ai segreti crittografati e a una chiave gestita dal cliente (CMK) KMS consentiranno alle applicazioni di accedere e decrittografare solo il rispettivo ID client e nome della sessione del ruolo. In questo modo, le applicazioni non potranno accedere reciprocamente all'ID client e al nome della sessione del ruolo e impersonificarsi a vicenda. L'immagine seguente mostra l'architettura migliorata.
Il flusso aggiornato prevede le seguenti fasi:
- P1 -
ProducerApp-1
recupera il suoclient-id
edrole-session-name
segreti da Secrets Manager - P2 -
ProducerApp-1
configura il segretoclient-id
asCLIENT_ID_CONFIG
nel codice dell'applicazione e presupponeTopic-B-Write-Role
(tramite la suaProducerApp-1-Role
ruolo IAM) trasmettendo il segretorole-session-name
all'SDK AWS STSassumeRole
chiamata di funzione - P3 - Con il
Topic-B-Write-Role
Ruolo IAM assunto,ProducerApp-1
inizia a inviare messaggi aTopic-B
- C1 -
ConsumerApp-1
edConsumerApp-2
recuperare i rispettiviclient-id
edrole-session-name
segreti da Secrets Manager - C2 -
ConsumerApp-1
edConsumerApp-2
configurare il rispettivo segretoclient-id
asCLIENT_ID_CONFIG
nel codice dell'applicazione e assumereTopic-B-Write-Role
(tramiteConsumerApp-1-Role
edConsumerApp-2-Role
ruoli IAM, rispettivamente) trasmettendo il proprio segretorole-session-name
nell'SDK AWS STSassumeRole
chiamata di funzione - C3 - Con il
Topic-B-Read-Role
Ruolo IAM assunto,ConsumerApp-1
edConsumerApp-2
iniziare a consumare messaggi daTopic-B
Fare riferimento alla documentazione per AWS Secrets Manager ed AWSKMS per comprendere meglio come si inseriscono nell'architettura.
Pulisci risorse
Passare alla console CloudFormation ed eliminare il file MSKStack
pila. Tutte le risorse create durante questo post verranno eliminate.
Conclusione
In questo post, abbiamo trattato le fasi dettagliate per configurare le quote Amazon MSK e ne abbiamo dimostrato l'effetto attraverso applicazioni client di esempio. Inoltre, abbiamo discusso come utilizzare le metriche client per determinare se un'applicazione client è limitata. Abbiamo anche evidenziato un potenziale problema con gli ID client in testo normale e i nomi delle sessioni dei ruoli. Consigliamo di implementare le quote Kafka con Amazon MSK utilizzando Secrets Manager e AWS KMS secondo il diagramma dell'architettura rivista per garantire un'architettura Zero Trust.
Se hai feedback o domande su questo post, inclusa l'architettura rivista, saremo lieti di ascoltarti. Ci auguriamo che ti sia piaciuto leggere questo post.
L'autore
Vika Bajaj è Senior Manager, Solutions Architects, Financial Services presso Amazon Web Services. Con oltre due decenni di esperienza nei servizi finanziari e lavorando con aziende native digitali, fornisce consulenza ai clienti sulla progettazione di prodotti, roadmap tecnologiche e architetture applicative.
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- EVM Finance. Interfaccia unificata per la finanza decentralizzata. Accedi qui.
- Quantum Media Group. IR/PR amplificato. Accedi qui.
- PlatoAiStream. Intelligenza dei dati Web3. Conoscenza amplificata. Accedi qui.
- Fonte: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :ha
- :È
- :non
- :Dove
- $ SU
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- capace
- Chi siamo
- sopra
- Accetta
- Accettando
- accesso
- Il mio account
- riconoscere
- operanti in
- aggiungere
- aggiunta
- aggiuntivo
- Inoltre
- Dopo shavasana, sedersi in silenzio; saluti;
- ancora
- Tutti
- assegnazione
- allocazioni
- consentire
- consente
- anche
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- ed
- Un altro
- in qualsiasi
- Apache
- Apache Kafka
- apparire
- Applicazioni
- applicazioni
- circa
- architettura
- SONO
- AS
- associato
- assunto
- At
- autenticato
- Autenticazione
- disponibile
- AWS
- AWS CloudFormazione
- Larghezza di banda
- basato
- BE
- perché
- stato
- prima
- essendo
- Meglio
- bloccato
- bootstrap
- entrambi
- Parte inferiore
- Scatola
- broker
- brokers
- del browser
- bufferizzare
- affari
- aziende
- ma
- by
- chiamata
- detto
- chiamata
- Materiale
- Custodie
- CAT
- lotta
- causando
- CD
- centrale
- il cambiamento
- Modifiche
- dai un'occhiata
- Scegli
- classe
- cliente
- clienti
- Cluster
- codice
- Uncommon
- completamento di una
- Calcolare
- concetti
- Configurazione
- configurato
- Collegamento
- conseguentemente
- consolle
- consumare
- Consumer
- contiene
- continua
- continua
- continua
- di controllo
- coperto
- creare
- creato
- Creazione
- Corrente
- cliente
- Clienti
- dati
- Piattaforma dati
- decenni
- decrypt
- Predefinito
- ritardo
- Dimo
- dimostrato
- Dipendente
- descrivere
- descritta
- Design
- dettagliati
- dettagli
- Determinare
- determina
- Dimensioni
- discusso
- Dsiplay
- distinguere
- documentazione
- scaricare
- dovuto
- durante
- ogni
- In precedenza
- eco
- effetto
- o
- enable
- abilitato
- Abilita
- crittografato
- endpoint
- imporre
- migliorata
- garantire
- entrare
- Ambiente
- errori
- Etere (ETH)
- alla fine
- esaminare
- esempio
- superare
- Tranne
- esperienza
- ha spiegato
- spiegazione
- export
- esposto
- feedback
- pochi
- figura
- Compila il
- File
- finanziario
- servizi finanziari
- Trovare
- Nome
- in forma
- flusso
- i seguenti
- segue
- Nel
- formato
- quattro
- da
- function
- Inoltre
- ottenere
- Idiota
- GitHub
- la governance
- maggiore
- Gruppo
- Gruppo
- contento
- Avere
- he
- sentire
- alto livello
- Evidenziato
- speranza
- host
- padroni di casa
- Come
- Tutorial
- HTML
- http
- HTTPS
- IAM
- ID
- Identità
- ids
- if
- illustra
- Immagine
- impattato
- implementazione
- Implementazione
- in
- Compreso
- indicare
- indica
- indicando
- individuale
- informazioni
- esempio
- integrale
- ai miglioramenti
- introdurre
- introdotto
- ISN
- problema
- IT
- SUO
- Java
- jpg
- kafka
- Le
- conosciuto
- LIMITE
- linea
- Linee
- Lista
- logico
- make
- gestito
- gestione
- direttore
- massimo
- Maggio..
- misurato
- Memorie
- messaggi
- Metrica
- verbale
- Moda
- modificare
- Monitorare
- Scopri di più
- MS
- molti
- multiplo
- devono obbligatoriamente:
- Nome
- nomi
- Navigare
- Navigazione
- Bisogno
- negativamente
- Rete
- New
- GENERAZIONE
- no
- noto
- Avviso..
- numero
- ottiene
- verificano
- of
- on
- ONE
- esclusivamente
- apre
- operato
- Operazioni
- Opzione
- Opzioni
- or
- minimo
- i
- Altro
- su
- ancora
- confezionati
- pagina
- vetro
- parametro
- parametri
- parte
- Passato
- Di passaggio
- sentiero
- percentuale
- eseguire
- performance
- autorizzazione
- plaintext
- piattaforma
- Platone
- Platone Data Intelligence
- PlatoneDati
- punto
- punti
- Termini e Condizioni
- politica
- Post
- potenziale
- premendo
- prevenire
- precedente
- in precedenza
- Direttore
- un bagno
- lavorazione
- produrre
- produttore
- Prodotto
- progettazione del prodotto
- proprietà
- fornire
- purché
- la percezione
- pubblicare
- Domande
- tasso
- piuttosto
- raggiunge
- Leggi
- Lettura
- raccomandare
- raccomandato
- di cui
- regione
- ricorda
- rimuovere
- sostituire
- deposito
- rappresentato
- richiesta
- richieste
- necessario
- risorsa
- Risorse
- quelli
- rispettivamente
- REST
- roadmap
- Ruolo
- ruoli
- Correre
- running
- s
- stesso
- soddisfatte
- soddisfatto
- screenshot
- sdk
- Secondo
- secondo
- Segreto
- Sezione
- sicuro
- problemi di
- token di sicurezza
- vedere
- inviare
- invio
- anziano
- separato
- Serie
- Servizi
- Sessione
- set
- regolazione
- impostazioni
- dovrebbero
- mostrato
- Spettacoli
- simile
- Allo stesso modo
- da
- Soluzioni
- Fonte
- codice sorgente
- lo spazio
- specifico
- specificato
- pila
- tappe
- inizia a
- iniziato
- step
- Passi
- Fermare
- memorizzati
- Streaming
- Corda
- più forte
- sottoreti
- successivo
- Con successo
- tale
- sufficiente
- in dotazione
- supporti
- Fai
- team
- Tecnologia
- modello
- modelli
- terminal
- test
- testato
- Testing
- di
- che
- Il
- L’ORIGINE
- loro
- Li
- poi
- perciò
- di
- questo
- tre
- Attraverso
- portata
- tempo
- a
- token
- argomento
- Argomenti
- trattare
- Affidati ad
- seconda
- Digitare
- Tipi di
- e una comprensione reciproca
- Aggiornanento
- aggiornato
- aggiornamento
- uso
- utilizzato
- Utente
- utenti
- usa
- utilizzando
- APPREZZIAMO
- Valori
- verificare
- via
- Visualizza
- Prima
- Modo..
- we
- sito web
- servizi web
- WELL
- quando
- se
- quale
- while
- volere
- con
- senza
- lavoro
- scrivere
- ancora
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro