Kafka-quota zijn een integraal onderdeel van Kafka-clusters met meerdere tenants. Ze voorkomen dat de Kafka-clusterprestaties negatief worden beïnvloed door slecht werkende toepassingen die clusterresources overmatig gebruiken. Bovendien zorgen ze ervoor dat het centrale streaming-gegevensplatform kan worden gebruikt als een multitenant-platform en kan worden gebruikt door downstream- en upstream-applicaties in meerdere business lines. Kafka ondersteunt twee soorten quota: quota voor netwerkbandbreedte en tariefquota aanvragen. Quota voor netwerkbandbreedte definiëren bytesnelheidsdrempels, zoals hoeveel gegevensclienttoepassingen kunnen produceren naar en verbruiken van elke afzonderlijke makelaar in een Kafka-cluster, gemeten in bytes per seconde. Aanvraagquota's beperken het percentage van de tijd dat elke individuele makelaar besteedt aan het verwerken van aanvragen voor clienttoepassingen. Afhankelijk van uw configuratie kunnen Kafka-quota's worden ingesteld voor specifieke gebruikers, specifieke client-ID's of beide.
In Deel 1 van deze tweedelige serie bespraken we de concepten voor het afdwingen van Kafka-quota in Amazon Managed Streaming voor Apache Kafka (Amazon MSK) clusters tijdens gebruik AWS Identiteits- en toegangsbeheer (IAM) toegangscontrole.
In dit bericht leiden we u door de stapsgewijze implementatie van het instellen van Kafka-quota in een MSK-cluster terwijl u IAM-toegangscontrole gebruikt en testen we deze via voorbeeldclienttoepassingen.
Overzicht oplossingen
De volgende figuur, die we voor het eerst introduceerden in Deel 1, illustreert hoe Kafka-clienttoepassingen (ProducerApp-1
, ConsumerApp-1
en ConsumerApp-2
) toegang Topic-B
in het MSK-cluster door schrijf- en lees-IAM-rollen op zich te nemen. Elke producer- en consumerclienttoepassing heeft een quotum dat bepaalt hoeveel gegevens ze kunnen produceren of verbruiken in bytes/seconde. De ProducerApp-1
quota stelt het in staat om tot 1024 bytes/seconde per makelaar te produceren. Evenzo de ConsumerApp-1
en ConsumerApp-2
quota stellen hen in staat om respectievelijk 5120 en 1024 bytes/seconde per broker te verbruiken. Het volgende is een korte uitleg van de stroom die wordt weergegeven in het architectuurdiagram:
- P1 -
ProducerApp-1
(via zijnProducerApp-1-Role
IAM-rol) neemt deTopic-B-Write-Role
IAM-rol om berichten naar te sturenTopic-B
- P2 - Met de
Topic-B-Write-Role
IAM-rol aangenomen,ProducerApp-1
begint met het verzenden van berichten naarTopic-B
- C1 -
ConsumerApp-1
(via zijnConsumerApp-1-Role
IAM-rol) enConsumerApp-2
(via zijnConsumerApp-2-Role
IAM-rol) nemen deTopic-B-Read-Role
IAM-rol om berichten van te lezenTopic-B
- C2 - Met de
Topic-B-Read-Role
IAM-rol aangenomen,ConsumerApp-1
enConsumerApp-2
beginnen met het consumeren van berichten vanTopic-B
Merk op dat dit bericht de AWS-opdrachtregelinterface (AWS-CLI), AWS CloudFormatie sjablonen, en de AWS-beheerconsole voor het inrichten en wijzigen van AWS-resources, en de ingerichte resources worden gefactureerd aan uw AWS-account.
De stappen op hoog niveau zijn als volgt:
- Richt een MSK-cluster in met IAM-toegangscontrole en Amazon Elastic Compute-cloud (Amazon EC2) instanties voor clienttoepassingen.
- creëren
Topic-B
op het MSK-cluster. - IAM-rollen maken voor toegang tot de clienttoepassingen
Topic-B
. - Voer de producenten- en consumententoepassingen uit zonder quota in te stellen.
- Configureer de productie- en verbruiksquota voor de clienttoepassingen.
- Voer de toepassingen opnieuw uit na het instellen van de quota.
Voorwaarden
Het wordt aanbevolen om te lezen Deel 1 van deze serie voordat u verder gaat. Om aan de slag te gaan, heb je het volgende nodig:
- Een AWS-account waarnaar in dit bericht wordt verwezen als het demo-account, ervan uitgaande dat de account-ID dat is
1111 1111 1111
- Rechten voor het maken, verwijderen en wijzigen van AWS-bronnen in het demo-account
Richt een MSK-cluster in met IAM-toegangscontrole en EC2-instanties
Deze stap omvat het inrichten van een MSK-cluster met IAM-toegangsbeheer in een VPC in het demo-account. Daarnaast maken we vier EC2-instances om configuratiewijzigingen aan te brengen in het MSK-cluster en hostproducent- en consumentenclienttoepassingen.
CloudFormation-stack implementeren
- Kloon het GitHub-repository om de CloudFormation-sjabloonbestanden en voorbeeldclienttoepassingen te downloaden:
- Kies op de AWS CloudFormation-console Stacks in het navigatievenster.
- Kies Maak een stapel.
- Voor Bereid sjabloon voorselecteer Sjabloon is klaar.
- Voor Sjabloonbronselecteer Upload een sjabloonbestand.
- Upload de
cfn-msk-stack-1.yaml
bestand vanamazon-msk-kafka-quotas/cfn-templates
directory, kies dan Volgende. - Voor Stack naam, ga naar binnen
MSKStack
. - Laat de parameters als standaard staan en kies Volgende.
- Scroll naar de onderkant van de Configureer stapelopties pagina en kies Volgende te gaan.
- Scroll naar de onderkant van de Beoordeling pagina, schakelt u het selectievakje in Ik erken dat CloudFormation IAM-bronnen kan creërenen kies Verzenden.
Het duurt ongeveer 30 minuten voordat de stapel is voltooid. Nadat de stapel met succes is gemaakt, worden de volgende bronnen gemaakt:
- Een VPC met drie privé-subnetten en één openbaar subnet
- Een MSK-cluster met drie makelaars met ingeschakelde IAM-toegangscontrole
- Een EC2-instantie genaamd
MSKAdminInstance
voor het wijzigen van MSK-clusterinstellingen en het maken en wijzigen van AWS-bronnen - EC2-instanties voor
ProducerApp-1
,ConsumerApp-1
enConsumerApp-2
, één voor elke clienttoepassing - Een afzonderlijke IAM-rol voor elke EC2-instantie die de clienttoepassing host, zoals weergegeven in het architectuurdiagram
- Van de stapel Uitgangen tabblad, let op de
MSKClusterArn
waarde.
Maak een onderwerp op het MSK-cluster
Maken Topic-B
op het MSK-cluster voert u de volgende stappen uit:
- Navigeer op de Amazon EC2-console naar uw lijst met actieve EC2-instanties.
- Selecteer het
MSKAdminInstance
EC2 bijvoorbeeld en kies Verbinden. - Op de Session Manager tabblad, kies Verbinden.
- Voer de volgende opdrachten uit op het nieuwe tabblad dat in uw browser wordt geopend:
- Stel de omgevingsvariabele zo in dat deze verwijst naar het IAM-eindpunt van MSK Clusterbrokers:
- Let op de waarde van
BOOTSTRAP_BROKERS_IAM
. - Voer de volgende Kafka CLI-opdracht uit om te maken
Topic-B
op het MSK-cluster:
Omdat het MSK-cluster is ingericht met IAM-toegangscontrole, is de optie --command-config
wijst config_iam.properties
, dat de eigenschappen bevat die vereist zijn voor IAM-toegangscontrole, gemaakt door de MSKStack
CloudFormation-stapel.
De volgende waarschuwingen kunnen verschijnen wanneer u de Kafka CLI-opdrachten uitvoert, maar u kunt ze negeren:
- Om dat te verifiëren:
Topic-B
is gemaakt, som dan alle onderwerpen op:
Maak IAM-rollen voor clienttoepassingen om toegang te krijgen tot Topic-B
Deze stap omvat het creëren Topic-B-Write-Role
en Topic-B-Read-Role
zoals weergegeven in het architectuurdiagram. Topic-B-Write-Role
maakt schrijfbewerkingen mogelijk Topic-B
, en kan worden aangenomen door de ProducerApp-1
. Op een vergelijkbare manier is de ConsumerApp-1
en ConsumerApp-2
kan aannemen Topic-B-Read-Role
om leesbewerkingen op uit te voeren Topic-B
. Om leesbewerkingen uit te voeren op Topic-B
, ConsumerApp-1
en ConsumerApp-2
moet ook behoren tot de consumentengroepen die tijdens de MSKStack
stack-update in de volgende stap.
Maak de rollen aan met de volgende stappen:
- Kies op de AWS CloudFormation-console Stacks in het navigatievenster.
- kies
MSKStack
En kies bijwerken. - Voor Bereid sjabloon voor, selecteer Huidige sjabloon vervangen.
- Voor Sjabloonbronselecteer Upload een sjabloonbestand.
- Upload de
cfn-msk-stack-2.yaml
bestand vanamazon-msk-kafka-quotas/cfn-templates
directory, kies dan Volgende. - Geef de volgende aanvullende stackparameters op:
-
- Voor Onderwerp B ARN, voer de
Topic-B
RNA.
- Voor Onderwerp B ARN, voer de
De ARN moet worden geformatteerd als arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Gebruik de clusternaam en cluster-UUID van de MSK-cluster-ARN die u eerder hebt genoteerd en geef uw AWS-regio op. Voor meer informatie, zie de IAM-toegangscontrole voor Amazon MSK.
-
- Voor ConsumerApp-1 Consumer Groepsnaam, ga naar binnen
ConsumerApp-1
consumentenorganisatie ARN.
- Voor ConsumerApp-1 Consumer Groepsnaam, ga naar binnen
Het moet worden geformatteerd als arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Voor ConsumerApp-2 Consumer Groepsnaam, ga naar binnen
ConsumerApp-2
consumentenorganisatie ARN.
- Voor ConsumerApp-2 Consumer Groepsnaam, ga naar binnen
Gebruik een vergelijkbaar formaat als de vorige ARN.
- Kies Volgende te gaan.
- Scroll naar de onderkant van de Stapel configureren optiepagina en kies Volgende te gaan.
- Scroll naar de onderkant van de Beoordeling pagina, schakelt u het selectievakje in Ik erken dat CloudFormation IAM-bronnen kan creërenen kies Stapel updaten.
Het duurt ongeveer 3 minuten voordat de stapel is bijgewerkt. Nadat de stapel met succes is bijgewerkt, worden de volgende bronnen gemaakt:
- Onderwerp-B-schrijfrol – Een IAM-rol met toestemming om schrijfbewerkingen uit te voeren
Topic-B
. Het vertrouwensbeleid staat deProducerApp-1-Role
IAM-rol om het op zich te nemen. - Onderwerp-B-Lees-Rol – Een IAM-rol met toestemming om leesbewerkingen uit te voeren
Topic-B
. Het vertrouwensbeleid staat deConsumerApp-1-Role
enConsumerApp-2-Role
IAM-rollen om het op zich te nemen. Verder,ConsumerApp-1
enConsumerApp-2
moet ook behoren tot de consumentengroepen die u hebt opgegeven bij het bijwerken van de stapel om leesbewerkingen op uit te voerenTopic-B
.
- Van de stapel Uitgangen tabblad, let op de
TopicBReadRoleARN
enTopicBWriteRoleARN
waarden.
Voer de producenten- en consumententoepassingen uit zonder quota in te stellen
Hier rennen we ProducerApp-1
, ConsumerApp-1
en ConsumerApp-2
zonder hun quota vast te stellen. Van de vorige stappen heb je nodig BOOTSTRAP_BROKERS_IAM
waarde, Topic-B-Write-Role
ARN, en Topic-B-Read-Role
ARN. De broncode van clienttoepassingen en hun verpakte versies zijn beschikbaar in de GitHub-repository.
Voer de applicatie ConsumerApp-1 uit
Om de run ConsumerApp-1
aanvraag, voert u de volgende stappen uit:
- Selecteer op de Amazon EC2-console de
ConsumerApp-1
EC2 bijvoorbeeld en kies Verbinden. - Op de Session Manager tabblad, kies Verbinden.
- Voer de volgende opdrachten uit op het nieuwe tabblad dat in uw browser wordt geopend:
- Voer de ... uit
ConsumerApp-1
applicatie om berichten van te gaan consumerenTopic-B
:
U kunt het vinden broncode op GitHub voor uw referentie. De details van de opdrachtregelparameter zijn als volgt:
- –bootstrap-servers – MSK cluster bootstrap brokers IAM-eindpunt.
- –aannemen-rol-arn -
Topic-B-Read-Role
IAM-rol ARN. Deze rol aannemend,ConsumerApp-1
leest berichten uit het onderwerp. - -regio – Regio die u gebruikt.
- –onderwerpnaam - Onderwerpnaam van waaruit
ConsumerApp-1
zal berichten lezen. De standaardwaarde isTopic-B
. - –consumentengroep – Consumentengroepsnaam voor
ConsumerApp-1
, zoals opgegeven tijdens de stackupdate. - –rol-sessie-naam -
ConsumerApp-1
gaat ervan uit dat deTopic-B-Read-Role
met de AWS-beveiligingstoken-service (AWS STS) SDK.ConsumerApp-1
zal deze rolsessienaam gebruiken bij het aanroepen van deassumeRole
functie. - -klant identificatie – Klant-ID voor
ConsumerApp-1
. - –print-consumenten-quota-statistieken – Vlag die aangeeft of klantstatistieken door op de terminal moeten worden afgedrukt
ConsumerApp-1
. - –cw-dimensienaam - Amazon Cloud Watch dimensienaam die zal worden gebruikt om metrische gegevens over clientbeperking te publiceren
ConsumerApp-1
. - –cw-dimensiewaarde – CloudWatch-dimensiewaarde die zal worden gebruikt om clientbeperkingsstatistieken te publiceren
ConsumerApp-1
. - –cw-naamruimte – Naamruimte waar
ConsumerApp-1
publiceert CloudWatch-statistieken om throttling te monitoren.
- Als u tevreden bent met de rest van de parameters, gebruikt u de volgende opdracht en wijzigt u deze
--assume-role-arn
en--region
volgens uw omgeving:
De fetch-throttle-time-avg
en fetch-throttle-time-max
clientstatistieken moeten 0.0 weergeven, wat aangeeft dat er geen beperking plaatsvindt ConsumerApp-1
. Vergeet niet dat we het verbruiksquotum niet hebben ingesteld voor ConsumerApp-1
nog. Even laten draaien.
Voer de applicatie ConsumerApp-2 uit
Om de run ConsumerApp-2
aanvraag, voert u de volgende stappen uit:
- Selecteer op de Amazon EC2-console de
ConsumerApp-2
EC2 bijvoorbeeld en kies Verbinden. - Op de Session Manager tabblad, kies Verbinden.
- Voer de volgende opdrachten uit op het nieuwe tabblad dat in uw browser wordt geopend:
- Voer de ... uit
ConsumerApp-2
applicatie om berichten van te gaan consumerenTopic-B
:
De code heeft vergelijkbare opdrachtregelparameterdetails als ConsumerApp-1
eerder besproken, met uitzondering van het volgende:
- –consumentengroep – Consumentengroepsnaam voor
ConsumerApp-2
, zoals opgegeven tijdens de stackupdate. - –rol-sessie-naam -
ConsumerApp-2
gaat ervan uit dat deTopic-B-Read-Role
met behulp van de AWS STS SDK.ConsumerApp-2
zal deze rolsessienaam gebruiken bij het aanroepen van deassumeRole
functie. - -klant identificatie – Klant-ID voor
ConsumerApp-2
.
- Als u tevreden bent met de rest van de parameters, gebruikt u de volgende opdracht en wijzigt u deze
--assume-role-arn
en--region
volgens uw omgeving:
De fetch-throttle-time-avg
en fetch-throttle-time-max
clientstatistieken moeten 0.0 weergeven, wat aangeeft dat er geen beperking plaatsvindt ConsumerApp-2
. Vergeet niet dat we het verbruiksquotum niet hebben ingesteld voor ConsumerApp-2
nog. Even laten draaien.
Voer de ProducerApp-1-toepassing uit
Om de run ProducerApp-1
aanvraag, voert u de volgende stappen uit:
- Selecteer op de Amazon EC2-console de
ProducerApp-1
EC2 bijvoorbeeld en kies Verbinden. - Op de Session Manager tabblad, kies Verbinden.
- Voer de volgende opdrachten uit op het nieuwe tabblad dat in uw browser wordt geopend:
- Voer de ... uit
ProducerApp-1
toepassing om berichten naar te verzendenTopic-B
:
U kunt het vinden broncode op GitHub voor uw referentie. De details van de opdrachtregelparameter zijn als volgt:
- –bootstrap-servers – MSK cluster bootstrap brokers IAM-eindpunt.
- –aannemen-rol-arn -
Topic-B-Write-Role
IAM-rol ARN. Deze rol aannemend,ProducerApp-1
zal berichten naar het onderwerp schrijven. - –onderwerpnaam -
ProducerApp-1
zal berichten naar dit onderwerp sturen. De standaardwaarde isTopic-B
. - -regio - AWS-regio die u gebruikt.
- –aantal berichten – Aantal berichten de
ProducerApp-1
applicatie zal naar het onderwerp sturen. - –rol-sessie-naam -
ProducerApp-1
gaat ervan uit dat deTopic-B-Write-Role
met behulp van de AWS STS SDK.ProducerApp-1
zal deze rolsessienaam gebruiken bij het aanroepen van deassumeRole
functie. - -klant identificatie – Klant-ID van
ProducerApp-1
. - –producent-type -
ProducerApp-1
kan ook worden uitgevoerd synchroon or asynchroon. Opties zijn sync or async. - –printproducent-quota-statistieken – Vlag die aangeeft of de klantstatistieken op de terminal moeten worden afgedrukt door ProducentApp-1.
- –cw-dimensienaam – CloudWatch-dimensienaam die zal worden gebruikt om clientbeperkingsstatistieken te publiceren ProducentApp-1.
- –cw-dimensiewaarde – CloudWatch-dimensiewaarde die zal worden gebruikt om clientbeperkingsstatistieken te publiceren ProducentApp-1.
- –cw-naamruimte – De naamruimte waar ProducentApp-1 publiceert CloudWatch-statistieken om throttling te monitoren.
- Als u tevreden bent met de rest van de parameters, gebruikt u de volgende opdracht en wijzigt u deze
--assume-role-arn
en--region
volgens uw omgeving. Om een synchrone Kafka-producent uit te voeren, gebruikt het de optie--producer-type sync
:
U kunt ook gebruiken --producer-type async
om een asynchrone producer te runnen. Voor meer details, zie Asynchroon verzenden.
De produce-throttle-time-avg
en produce-throttle-time-max
clientstatistieken moeten 0.0 weergeven, wat aangeeft dat er geen beperking plaatsvindt ProducerApp-1
. Vergeet niet dat we het productiequotum niet hebben ingesteld voor ProducerApp-1
nog. Check dat ConsumerApp-1
en ConsumerApp-2
kan berichten consumeren en merken dat ze niet worden beperkt. Stop de klanttoepassingen voor consumenten en producenten door op te drukken Ctrl + C in hun respectievelijke browsertabbladen.
Stel productie- en verbruiksquota in voor clienttoepassingen
Nu we de producenten- en consumententoepassingen zonder quota hebben uitgevoerd, stellen we hun quota in en voeren ze opnieuw uit.
Open de Sessiebeheerder terminal voor de MSKAdminInstance
EC2 zoals eerder beschreven en voer de volgende opdrachten uit om de standaardconfiguratie van een van de brokers in het MSK-cluster te vinden. MSK-clusters worden ingericht met de standaardconfiguratie van Kafka-quota.
De volgende schermafbeelding toont de Broker-1
standaardwaarden voor quota.consumer.default
en quota.producer.default
.
ProducerApp-1 quotaconfiguratie
Vervang tijdelijke aanduidingen in alle opdrachten in deze sectie door waarden die overeenkomen met uw account.
Stel volgens het eerder besproken architectuurdiagram de ProducerApp-1
quotum produceren tot 1024 bytes/seconde. Voor <ProducerApp-1 Client Id>
en <ProducerApp-1 Role Session>
, zorg ervoor dat u dezelfde waarden gebruikt die u tijdens het hardlopen gebruikte ProducerApp-1
eerder (producerapp-1-client-id
en producerapp-1-role-session
respectievelijk):
Controleer de ProducerApp-1
produceer quota met behulp van de volgende opdracht:
U kunt de verwijderen ProducerApp-1
produceer quota met behulp van de volgende opdracht, maar voer de opdracht niet uit aangezien we de quota hierna zullen testen.
ConsumerApp-1 quotaconfiguratie
Vervang tijdelijke aanduidingen in alle opdrachten in deze sectie door waarden die overeenkomen met uw account.
Laten we een verbruiksquotum instellen van 5120 bytes/seconde voor ConsumerApp-1
. Voor <ConsumerApp-1 Client Id>
en <ConsumerApp-1 Role Session>
, zorg ervoor dat u dezelfde waarden gebruikt die u tijdens het hardlopen gebruikte ConsumerApp-1
eerder (consumerapp-1-client-id
en consumerapp-1-role-session
respectievelijk):
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>
Controleer de ConsumerApp-1
verbruiken quota met behulp van de volgende opdracht:
U kunt de verwijderen ConsumerApp-1
verbruiken quota, met behulp van de volgende opdracht, maar voer de opdracht niet uit aangezien we de quota hierna zullen testen.
ConsumerApp-2 quotaconfiguratie
Vervang tijdelijke aanduidingen in alle opdrachten in deze sectie door waarden die overeenkomen met uw account.
Laten we een verbruiksquotum instellen van 1024 bytes/seconde voor ConsumerApp-2
. Voor <ConsumerApp-2 Client Id>
en <ConsumerApp-2 Role Session>
, zorg ervoor dat u dezelfde waarden gebruikt die u tijdens het hardlopen gebruikte ConsumerApp-2
eerder (consumerapp-2-client-id
en consumerapp-2-role-session
respectievelijk):
Controleer de ConsumerApp-2
verbruiken quota met behulp van de volgende opdracht:
Zoals met ConsumerApp-1
, kunt u de ConsumerApp-2
consumeer quota met dezelfde opdracht als ConsumerApp-2
klant- en gebruikersgegevens.
Voer de producenten- en consumententoepassingen opnieuw uit na het instellen van quota
Laten we de toepassingen opnieuw uitvoeren om het effect van de quota te verifiëren.
Voer ProducerApp-1 opnieuw uit
rerun ProducerApp-1
in gelijktijdig mode met dezelfde opdracht die u eerder gebruikte. De volgende schermafbeelding illustreert dat wanneer ProducerApp-1
bereikt zijn quotum op een van de makelaars, de produce-throttle-time-avg
en produce-throttle-time-max client
metrische waarde zal hoger zijn dan 0.0. Een waarde boven de 0.0 geeft dat aan ProducerApp-1
wordt gesmoord. Toestaan ProducerApp-1
om een paar seconden te lopen en stop het dan door te gebruiken Ctrl + C.
U kunt het effect van het productiequotum ook testen door het opnieuw uit te voeren ProducerApp-1
opnieuw in asynchrone modus (--producer-type async
). Vergelijkbaar met een synchrone uitvoering, illustreert de volgende schermafbeelding dat wanneer ProducerApp-1
bereikt zijn quotum op een van de makelaars, de produce-throttle-time-avg
en produce-throttle-time-max
De waarde van klantstatistieken zal hoger zijn dan 0.0. Een waarde boven de 0.0 geeft dat aan ProducerApp-1
wordt gesmoord. Asynchroon toestaan ProducerApp-1
om even te rennen.
Je ziet uiteindelijk een TimeoutException
vermelding org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Bij gebruik van een asynchrone producent en het verzenden van berichten met een hogere snelheid dan de makelaar kan accepteren vanwege het quotum, worden de berichten eerst in het geheugen van de clienttoepassing in de wachtrij geplaatst. De client zal uiteindelijk geen bufferruimte meer hebben als de snelheid van het verzenden van berichten hoger blijft dan het accepteren van berichten, waardoor de volgende Producer.send()
bellen om te worden geblokkeerd. Producer.send()
zal uiteindelijk een gooien TimeoutException
als de time-outvertraging niet voldoende is om de makelaar in staat te stellen de applicatie van de producent in te halen. Stop ProducerApp-1
met Ctrl + C.
Voer ConsumerApp-1 opnieuw uit
rerun ConsumerApp-1
met dezelfde opdracht die u eerder gebruikte. De volgende schermafbeelding illustreert dat wanneer ConsumerApp-1
bereikt zijn quotum, de fetch-throttle-time-avg
en fetch-throttle-time-max client
metrische waarde zal hoger zijn dan 0.0. Een waarde boven de 0.0 geeft dat aan ConsumerApp-1
wordt gesmoord.
Allow ConsumerApp-1
om een paar seconden te lopen en stop het dan door te gebruiken Ctrl + C.
Voer ConsumerApp-2 opnieuw uit
rerun ConsumerApp-2
met dezelfde opdracht die u eerder gebruikte. Zo ook wanneer ConsumerApp-2
bereikt zijn quotum, de fetch-throttle-time-avg
en fetch-throttle-time-max client
metrische waarde zal hoger zijn 0.0. Een waarde hierboven 0.0 geeft aan dat ConsumerApp-2
wordt gesmoord. Toestaan ConsumerApp-2
om een paar seconden te lopen en stop het dan door op te drukken Ctrl + C.
Klantquotastatistieken in Amazon CloudWatch
In Deel 1, hebben we uitgelegd dat klantstatistieken metrische gegevens zijn die worden weergegeven door clients die verbinding maken met Kafka-clusters. Laten we de klantstatistieken in CloudWatch eens bekijken.
- Kies op de CloudWatch-console Alle statistieken.
- Onder Aangepaste naamruimten, kiest u de naamruimte die u hebt opgegeven tijdens het uitvoeren van de clienttoepassingen.
- Kies de dimensienaam en selecteer
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
enfetch-throttle-time-avg metrics
voor alle toepassingen.
Deze statistieken geven beperkingsgedrag aan voor ProducerApp-1
, ConsumerApp-1
en ConsumerApp-2
toepassingen die zijn getest met de quotaconfiguraties in de vorige sectie. De volgende schermafbeeldingen geven de beperking van ProducerApp-1
, ConsumerApp-1
en ConsumerApp-2
gebaseerd op quota voor netwerkbandbreedte. ProducerApp-1
, ConsumerApp-1
en ConsumerApp-2
applicaties voeren hun respectieve klantstatistieken door naar CloudWatch. U kunt de broncode op GitHub voor uw referentie.
Beveiligde client-ID en rolsessienaam
We hebben besproken hoe Kafka-quota kunnen worden geconfigureerd met behulp van een applicatie klant identificatie en geauthenticeerd gebruiker voornaam. Wanneer een clienttoepassing een IAM-rol op zich neemt om toegang te krijgen tot Kafka-onderwerpen op een MSK-cluster met IAM-authenticatie ingeschakeld, wordt deze geauthenticeerd gebruiker principal wordt weergegeven in het volgende formaat (voor meer informatie, zie IAM-ID's):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Het bevat de naam van de rolsessie (in dit geval, producerapp-1-role-session
) gebruikt in de clienttoepassing terwijl het een IAM-rol op zich neemt via de AWS STS SDK. De clienttoepassing broncode is beschikbaar voor uw referentie. De klant identificatie is een logische naamreeks (bijvoorbeeld producerapp-1-client-id
) die door het applicatieteam in de applicatiecode is geconfigureerd. Daarom kan een applicatie zich voordoen als een andere applicatie als het de klant identificatie en naam van de rolsessie van de andere applicatie en of deze toestemming heeft om dezelfde IAM-rol op zich te nemen.
Zoals weergegeven in het architectuurdiagram, ConsumerApp-1
en ConsumerApp-2
zijn twee afzonderlijke clienttoepassingen met hun respectievelijke quotatoewijzingen. Omdat beide toestemming hebben om dezelfde IAM-rol op zich te nemen (Topic-B-Read-Role
) in het demo-account mogen ze berichten van consumeren Topic-B
. MSK-clustermakelaars onderscheiden ze dus op basis van hun client-ID's en gebruikers (die hun respectieve naam van de rolsessie waarden). Als ConsumerApp-2
krijgt op de een of andere manier de ConsumerApp-1
naam van de rolsessie en klant identificatie, het kan nabootsen ConsumerApp-1
door de te specificeren ConsumerApp-1
naam van de rolsessie en klant identificatie in de toepassingscode.
Laten we aannemen ConsumerApp-1
toepassingen consumerapp-1-client-id
en consumerapp-1-role-session
als klant identificatie en naam van de rolsessie, respectievelijk. daarom, ConsumerApp-1's
geverifieerd gebruiker opdrachtgever zal als volgt verschijnen wanneer het ervan uitgaat dat de Topic-B-Read-Role
IAM-rol:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Evenzo ConsumerApp-2
toepassingen consumerapp-2-client-id
en consumerapp-2-role-session
als klant identificatie en naam van de rolsessie, respectievelijk. daarom, ConsumerApp-2's
geverifieerd gebruiker opdrachtgever zal als volgt verschijnen wanneer het ervan uitgaat dat de Topic-B-Read-Role
IAM-rol:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
verkrijgt ConsumerApp-1's
klant identificatie en naam van de rolsessie en specificeert ze in de applicatiecode, zullen MSK-clustermakelaars het behandelen als ConsumerApp-1
en bekijk zijn klant identificatie as consumerapp-1-client-id
, en de geverifieerde gebruiker hoofdsom als volgt:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Dit staat toe ConsumerApp-2
om gegevens van het MSK-cluster te verbruiken met een maximumsnelheid van 5120 bytes per seconde in plaats van 1024 bytes per seconde volgens de oorspronkelijke quotatoewijzing. Vervolgens, ConsumerApp-1's
doorvoer zal negatief worden beïnvloed als ConsumerApp-2
loopt gelijktijdig.
Verbeterde architectuur
U kunt introduceren AWS-geheimenmanager en AWS Sleutelbeheerservice (AWS KMS) in de architectuur om applicaties te beveiligen' client-ID's en namen van rolsessies. Voor een sterker beheer moeten de client-ID en de rolsessienaam van de toepassingen worden opgeslagen als versleutelde geheimen in de Secrets Manager. Het IAM-bronbeleid dat is gekoppeld aan versleutelde geheimen en een KMS-klantbeheerde sleutel (CMK) stelt toepassingen in staat om alleen hun respectieve client-ID en rolsessienaam te openen en te ontsleutelen. Op deze manier hebben applicaties geen toegang tot elkaars client-ID en naam van de rolsessie en kunnen ze zich niet voor elkaar uitgeven. De volgende afbeelding toont de verbeterde architectuur.
De bijgewerkte stroom heeft de volgende fasen:
- P1 -
ProducerApp-1
haalt zijnclient-id
enrole-session-name
geheimen van Secrets Manager - P2 -
ProducerApp-1
configureert het geheimclient-id
asCLIENT_ID_CONFIG
in de toepassingscode en gaat ervan uitTopic-B-Write-Role
(via zijnProducerApp-1-Role
IAM-rol) door het geheim door te gevenrole-session-name
naar de AWS STS SDKassumeRole
functieaanroep - P3 - Met de
Topic-B-Write-Role
IAM-rol aangenomen,ProducerApp-1
begint met het verzenden van berichten naarTopic-B
- C1 -
ConsumerApp-1
enConsumerApp-2
hun respectievelijke ophalenclient-id
enrole-session-name
geheimen van Secrets Manager - C2 -
ConsumerApp-1
enConsumerApp-2
hun respectievelijke geheim configurerenclient-id
asCLIENT_ID_CONFIG
in hun toepassingscode en neem aanTopic-B-Write-Role
(viaConsumerApp-1-Role
enConsumerApp-2-Role
IAM-rollen) door hun geheim door te gevenrole-session-name
in de AWS STS-SDKassumeRole
functieaanroep - C3 - Met de
Topic-B-Read-Role
IAM-rol aangenomen,ConsumerApp-1
enConsumerApp-2
beginnen met het consumeren van berichten vanTopic-B
Raadpleeg de documentatie voor AWS-geheimenmanager en AWS KMS om beter te begrijpen hoe ze in de architectuur passen.
Ruim middelen op
Navigeer naar de CloudFormation-console en verwijder het MSKStack
stapel. Alle bronnen die tijdens dit bericht zijn gemaakt, worden verwijderd.
Conclusie
In dit bericht hebben we gedetailleerde stappen besproken om Amazon MSK-quota te configureren en hebben we hun effect gedemonstreerd door middel van voorbeeldclienttoepassingen. Daarnaast hebben we besproken hoe u clientstatistieken kunt gebruiken om te bepalen of een clienttoepassing wordt beperkt. We hebben ook gewezen op een mogelijk probleem met client-ID's in platte tekst en namen van rolsessies. We raden aan om Kafka-quota te implementeren met Amazon MSK met behulp van Secrets Manager en AWS KMS volgens het herziene architectuurdiagram om een zero-trust-architectuur te garanderen.
Als je feedback of vragen hebt over dit bericht, inclusief de herziene architectuur, horen we dat graag van je. We hopen dat je het leuk vond om dit bericht te lezen.
Over de auteur
Vika Bajaj is Senior Manager, Solutions Architects, Financial Services bij Amazon Web Services. Met meer dan twee decennia ervaring in financiële dienstverlening en het werken met digital-native bedrijven, adviseert hij klanten over productontwerp, technologische roadmaps en applicatie-architecturen.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- EVM Financiën. Uniforme interface voor gedecentraliseerde financiën. Toegang hier.
- Quantum Media Groep. IR/PR versterkt. Toegang hier.
- PlatoAiStream. Web3 gegevensintelligentie. Kennis versterkt. Toegang hier.
- Bron: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- : heeft
- :is
- :niet
- :waar
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- in staat
- Over
- boven
- ACCEPTEREN
- te accepteren
- toegang
- Account
- erkennen
- over
- toevoegen
- toevoeging
- Extra
- Daarnaast
- Na
- weer
- Alles
- toewijzing
- toewijzingen
- toelaten
- toestaat
- ook
- Amazone
- Amazon EC2
- Amazon Web Services
- an
- en
- Nog een
- elke
- apache
- Apache Kafka
- verschijnen
- Aanvraag
- toepassingen
- ongeveer
- architectuur
- ZIJN
- AS
- geassocieerd
- uitgegaan van
- At
- geverifieerd
- authenticatie
- Beschikbaar
- AWS
- AWS CloudFormatie
- bandbreedte
- gebaseerde
- BE
- omdat
- geweest
- vaardigheden
- wezen
- Betere
- geblokkeerd
- Bootstrap
- zowel
- Onder
- Box camera's
- makelaar
- brokers
- browser
- buffer
- bedrijfsdeskundigen
- ondernemingen
- maar
- by
- Bellen
- Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen.
- bellen
- CAN
- geval
- KAT
- het worstelen
- veroorzakend
- CD
- centraal
- verandering
- Wijzigingen
- controle
- Kies
- klasse
- klant
- klanten
- TROS
- code
- Gemeen
- compleet
- Berekenen
- concepten
- Configuratie
- geconfigureerd
- Wij verbinden
- bijgevolg
- troosten
- consumeren
- consument
- bevat
- voortzetten
- blijft
- voortgezette
- onder controle te houden
- bedekt
- en je merk te creëren
- aangemaakt
- Wij creëren
- Actueel
- klant
- Klanten
- gegevens
- Gegevensplatform
- decennia
- decoderen
- Standaard
- vertraging
- Demo
- gedemonstreerd
- Afhankelijk
- beschrijven
- beschreven
- Design
- gedetailleerd
- gegevens
- Bepalen
- bepaalt
- Afmeting
- besproken
- Display
- onderscheiden
- documentatie
- Download
- twee
- gedurende
- elk
- Vroeger
- echo
- effect
- beide
- in staat stellen
- ingeschakeld
- maakt
- versleutelde
- Endpoint
- afdwingen
- verbeterde
- verzekeren
- Enter
- Milieu
- fouten
- Ether (ETH)
- uiteindelijk
- onderzoeken
- voorbeeld
- overtreffen
- Behalve
- ervaring
- uitgelegd
- uitleg
- exporteren
- blootgestelde
- feedback
- weinig
- Figuur
- Dien in
- Bestanden
- financieel
- financiële diensten
- VIND DE PLEK DIE PERFECT VOOR JOU IS
- Voornaam*
- geschikt
- stroom
- volgend
- volgt
- Voor
- formaat
- vier
- oppompen van
- functie
- Bovendien
- krijgen
- Git
- GitHub
- bestuur
- meer
- Groep
- Groep
- gelukkig
- Hebben
- he
- horen
- high-level
- Gemarkeerd
- hoop
- gastheer
- hosts
- Hoe
- How To
- HTML
- http
- HTTPS
- IAM
- ID
- Identiteit
- ids
- if
- illustreert
- beeld
- beïnvloed
- uitvoering
- uitvoering
- in
- Inclusief
- aangeven
- geeft aan
- wat aangeeft
- individueel
- informatie
- instantie
- integraal
- in
- voorstellen
- geïntroduceerd
- isn
- kwestie
- IT
- HAAR
- Java
- jpg
- kafka
- sleutel
- bekend
- LIMIT
- Lijn
- lijnen
- Lijst
- logisch
- maken
- beheerd
- management
- manager
- maximaal
- Mei..
- afgemeten
- Geheugen
- berichten
- Metriek
- minuten
- Mode
- wijzigen
- monitor
- meer
- MS
- veel
- meervoudig
- Dan moet je
- naam
- namen
- OP DEZE WEBSITE VIND JE
- Navigatie
- Noodzaak
- negatief
- netwerk
- New
- volgende
- geen
- bekend
- Merk op..
- aantal
- verkrijgt
- voorkomend
- of
- on
- EEN
- Slechts
- opent
- bediend
- Operations
- Keuze
- Opties
- or
- bestellen
- origineel
- Overige
- uit
- over
- verpakt
- pagina
- brood
- parameter
- parameters
- deel
- voorbij
- Voorbijgaand
- pad
- percentage
- uitvoeren
- prestatie
- toestemming
- Platte tekst
- platform
- Plato
- Plato gegevensintelligentie
- PlatoData
- punt
- punten
- beleidsmaatregelen door te lezen.
- beleidsmaatregelen
- Post
- potentieel
- druk
- voorkomen
- vorig
- die eerder
- Principal
- privaat
- verwerking
- produceren
- producent
- Product
- productontwerp
- vastgoed
- zorgen voor
- mits
- publiek
- publiceren
- Contact
- tarief
- liever
- Bereikt
- Lees
- lezing
- adviseren
- aanbevolen
- verwezen
- regio
- niet vergeten
- verwijderen
- vervangen
- bewaarplaats
- vertegenwoordigd
- te vragen
- verzoeken
- nodig
- hulpbron
- Resources
- degenen
- respectievelijk
- REST
- routekaarten
- Rol
- rollen
- lopen
- lopend
- s
- dezelfde
- tevreden
- tevreden met
- screenshots
- sdk
- Tweede
- seconden
- Geheim
- sectie
- beveiligen
- veiligheid
- beveiligingstoken
- zien
- sturen
- verzending
- senior
- apart
- -Series
- Diensten
- Sessie
- reeks
- het instellen van
- settings
- moet
- getoond
- Shows
- gelijk
- evenzo
- sinds
- Oplossingen
- bron
- broncode
- Tussenruimte
- specifiek
- gespecificeerd
- stack
- stadia
- begin
- gestart
- Stap voor
- Stappen
- stop
- opgeslagen
- streaming
- Draad
- sterker
- subnetten
- volgend
- Met goed gevolg
- dergelijk
- voldoende
- geleverde
- steunen
- Nemen
- team
- Technologie
- sjabloon
- templates
- terminal
- proef
- getest
- Testen
- neem contact
- dat
- De
- De Bron
- hun
- Ze
- harte
- daarom
- ze
- dit
- drie
- Door
- doorvoer
- niet de tijd of
- naar
- teken
- onderwerp
- onderwerpen
- behandelen
- Trust
- twee
- type dan:
- types
- begrip
- bijwerken
- bijgewerkt
- bijwerken
- .
- gebruikt
- Gebruiker
- gebruikers
- toepassingen
- gebruik
- waarde
- Values
- controleren
- via
- Bekijk
- was
- Manier..
- we
- web
- webservices
- GOED
- wanneer
- of
- welke
- en
- wil
- Met
- zonder
- werkzaam
- schrijven
- nog
- u
- Your
- zephyrnet