Kafka-kvoter är en integrerad del av Kafka-kluster med flera hyresgäster. De förhindrar att Kafka-klusterprestanda påverkas negativt av dåligt uppförda applikationer som överkonsumerar klusterresurser. Dessutom gör de det möjligt för den centrala strömningsdataplattformen att drivas som en plattform för flera hyresgäster och användas av nedströms- och uppströmsapplikationer över flera affärsområden. Kafka stöder två typer av kvoter: nätverksbandbreddskvoter och begära skattekvoter. Nätverksbandbreddskvoter definierar byte-hastighetströsklar som hur mycket data klientapplikationer kan producera till och konsumera från varje enskild mäklare i ett Kafka-kluster mätt i byte per sekund. Priskvoter för förfrågningar begränsar den procentandel av tid som varje enskild mäklare ägnar åt att behandla kundansökningar. Beroende på din konfiguration kan Kafka-kvoter ställas in för specifika användare, specifika klient-ID:n eller båda.
In del 1 i denna tvådelade serie diskuterade vi koncepten för hur man upprätthåller Kafka-kvoter Amazon Managed Streaming för Apache Kafka (Amazon MSK)-kluster medan du använder AWS identitets- och åtkomsthantering (IAM) åtkomstkontroll.
I det här inlägget leder vi dig genom steg-för-steg-implementeringen av att ställa in Kafka-kvoter i ett MSK-kluster medan du använder IAM-åtkomstkontroll och testar dem genom exempel på klientapplikationer.
Lösningsöversikt
Följande figur, som vi först introducerade i del 1, illustrerar hur Kafka klientapplikationer (ProducerApp-1
, ConsumerApp-1
och ConsumerApp-2
) tillgång Topic-B
i MSK-klustret genom att anta skriv- och läs-IAM-roller. Varje producent- och konsumentklientapplikation har en kvot som bestämmer hur mycket data de kan producera eller konsumera i byte/sekund. De ProducerApp-1
kvoten gör att den kan producera upp till 1024 byte/sekund per mäklare. På samma sätt ConsumerApp-1
och ConsumerApp-2
kvoter tillåter dem att konsumera 5120 respektive 1024 byte/sekund per mäklare. Följande är en kort förklaring av flödet som visas i arkitekturdiagrammet:
- P1 -
ProducerApp-1
(via dessProducerApp-1-Role
IAM-rollen) antarTopic-B-Write-Role
IAM-roll att skicka meddelanden tillTopic-B
- P2 - Med
Topic-B-Write-Role
IAM-rollen antogs,ProducerApp-1
börjar skicka meddelanden tillTopic-B
- C1 -
ConsumerApp-1
(via dessConsumerApp-1-Role
IAM roll) ochConsumerApp-2
(via dessConsumerApp-2-Role
IAM roll) antaTopic-B-Read-Role
IAM roll att läsa meddelanden frånTopic-B
- C2 - Med
Topic-B-Read-Role
IAM-rollen antogs,ConsumerApp-1
ochConsumerApp-2
börja konsumera meddelanden frånTopic-B
Observera att det här inlägget använder AWS-kommandoradsgränssnitt (AWS CLI), AWS molnformation mallar och AWS Management Console för tillhandahållande och modifiering av AWS-resurser, och tillhandahållna resurser kommer att faktureras ditt AWS-konto.
Stegen på hög nivå är följande:
- Tillhandahålla ett MSK-kluster med IAM-åtkomstkontroll och Amazon Elastic Compute Cloud (Amazon EC2)-instanser för klientapplikationer.
- Skapa
Topic-B
på MSK-klustret. - Skapa IAM-roller för klientapplikationerna att komma åt
Topic-B
. - Kör producent- och konsumentapplikationerna utan att sätta kvoter.
- Konfigurera produktions- och konsumtionskvoterna för klientapplikationerna.
- Kör applikationerna igen efter att ha ställt in kvoterna.
Förutsättningar
Det rekommenderas att du läser del 1 av den här serien innan du fortsätter. För att komma igång behöver du följande:
- Ett AWS-konto som kommer att kallas demokontot i det här inlägget, förutsatt att dess konto-ID är
1111 1111 1111
- Behörigheter att skapa, ta bort och ändra AWS-resurser i demokontot
Tillhandahålla ett MSK-kluster med IAM-åtkomstkontroll och EC2-instanser
Det här steget innefattar provisionering av ett MSK-kluster med IAM-åtkomstkontroll i en VPC i demokontot. Dessutom skapar vi fyra EC2-instanser för att göra konfigurationsändringar för MSK-klustret och värdproducent- och konsumentklientapplikationer.
Distribuera CloudFormation-stack
- Klona GitHub repository för att ladda ner CloudFormations mallfiler och exempel på klientapplikationer:
- Välj på AWS CloudFormation-konsolen Stacks i navigeringsfönstret.
- Välja Skapa stack.
- För Förbered mall, Välj Mallen är klar.
- För Mallkälla, Välj Ladda upp en mallfil.
- Ladda upp
cfn-msk-stack-1.yaml
fil frånamazon-msk-kafka-quotas/cfn-templates
katalog och välj sedan Nästa. - För Stapla namn, stiga på
MSKStack
. - Lämna parametrarna som standard och välj Nästa.
- Bläddra till botten av Konfigurera stackalternativ sida och välj Nästa att fortsätta.
- Bläddra till botten av översyn sida, markera kryssrutan Jag medger att CloudFormation kan skapa IAM-resurser, och välj Skicka.
Det tar cirka 30 minuter för stacken att slutföras. Efter att stacken har skapats kommer följande resurser att skapas:
- En VPC med tre privata subnät och ett publikt subnät
- Ett MSK-kluster med tre mäklare med IAM-åtkomstkontroll aktiverad
- En EC2-instans anropade
MSKAdminInstance
för att ändra MSK-klusterinställningar samt skapa och modifiera AWS-resurser - EC2-instanser för
ProducerApp-1
,ConsumerApp-1
ochConsumerApp-2
, en för varje klientapplikation - En separat IAM-roll för varje EC2-instans som är värd för klientapplikationen, som visas i arkitekturdiagrammet
- Från stackens Utgångarna fliken, notera
MSKClusterArn
värde.
Skapa ett ämne på MSK-klustret
Att skapa Topic-B
på MSK-klustret, slutför följande steg:
- På Amazon EC2-konsolen, navigera till din lista över körande EC2-instanser.
- Välj
MSKAdminInstance
EC2-instans och välj Kontakta. - På Sessionshanteraren fliken, välj Kontakta.
- Kör följande kommandon på den nya fliken som öppnas i din webbläsare:
- Ställ in miljövariabeln så att den pekar på MSK Cluster Brokers IAM-slutpunkt:
- Notera värdet av
BOOTSTRAP_BROKERS_IAM
. - Kör följande Kafka CLI-kommando för att skapa
Topic-B
på MSK-klustret:
Eftersom MSK-klustret är försett med IAM-åtkomstkontroll är alternativet --command-config
pekar på config_iam.properties
, som innehåller de egenskaper som krävs för IAM-åtkomstkontroll, skapad av MSKStack
CloudFormation stack.
Följande varningar kan visas när du kör Kafka CLI-kommandon, men du kan ignorera dem:
- För att verifiera det
Topic-B
har skapats, lista alla ämnen:
Skapa IAM-roller för klientapplikationer för att komma åt Topic-B
Detta steg innebär att skapa Topic-B-Write-Role
och Topic-B-Read-Role
som visas i arkitekturdiagrammet. Topic-B-Write-Role
aktiverar skrivoperationer på Topic-B
, och kan antas av ProducerApp-1
. På ett liknande sätt är ConsumerApp-1
och ConsumerApp-2
kan anta Topic-B-Read-Role
att utföra läsoperationer på Topic-B
. För att utföra läsoperationer på Topic-B
, ConsumerApp-1
och ConsumerApp-2
måste också tillhöra de konsumentgrupper som anges under MSKStack
stackuppdatering i efterföljande steg.
Skapa rollerna med följande steg:
- Välj på AWS CloudFormation-konsolen Stacks i navigeringsfönstret.
- Välja
MSKStack
Och välj Uppdatering. - För Förbered mall, välj Ersätt aktuell mall.
- För Mallkälla, Välj Ladda upp en mallfil.
- Ladda upp
cfn-msk-stack-2.yaml
fil frånamazon-msk-kafka-quotas/cfn-templates
katalog och välj sedan Nästa. - Ange följande ytterligare stackparametrar:
-
- För Ämne B ARN, gå in i
Topic-B
RNA.
- För Ämne B ARN, gå in i
ARN måste formateras som arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Använd klusternamnet och kluster-UUID från MSK-klustret ARN som du noterade tidigare och ange din AWS-region. För mer information, se IAM-åtkomstkontroll för Amazon MSK.
-
- För ConsumerApp-1 Konsumentgruppsnamn, stiga på
ConsumerApp-1
konsumentgruppen ARN.
- För ConsumerApp-1 Konsumentgruppsnamn, stiga på
Det måste formateras som arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- För ConsumerApp-2 Konsumentgruppsnamn, stiga på
ConsumerApp-2
konsumentgruppen ARN.
- För ConsumerApp-2 Konsumentgruppsnamn, stiga på
Använd ett liknande format som det tidigare ARN.
- Välja Nästa att fortsätta.
- Bläddra till botten av Konfigurera stack alternativsida och välj Nästa att fortsätta.
- Bläddra till botten av översyn sida, markera kryssrutan Jag medger att CloudFormation kan skapa IAM-resurser, och välj Uppdatera stack.
Det tar cirka 3 minuter för stacken att uppdateras. Efter att stacken har uppdaterats kommer följande resurser att skapas:
- Ämne-B-Skriv-Roll – En IAM-roll med behörighet att utföra skrivoperationer på
Topic-B
. Dess förtroendepolicy tillåterProducerApp-1-Role
IAM roll att anta det. - Ämne-B-Läs-Roll – En IAM-roll med behörighet att utföra läsoperationer på
Topic-B
. Dess förtroendepolicy tillåterConsumerApp-1-Role
ochConsumerApp-2-Role
IAM-roller att ta på sig det. Dessutom,ConsumerApp-1
ochConsumerApp-2
måste också tillhöra de konsumentgrupper du angav när du uppdaterade stacken för att utföra läsoperationer påTopic-B
.
- Från stackens Utgångarna fliken, notera
TopicBReadRoleARN
ochTopicBWriteRoleARN
värden.
Kör producent- och konsumentapplikationerna utan att sätta kvoter
Här springer vi ProducerApp-1
, ConsumerApp-1
och ConsumerApp-2
utan att sätta sina kvoter. Från de föregående stegen behöver du BOOTSTRAP_BROKERS_IAM
värde, Topic-B-Write-Role
ARN, och Topic-B-Read-Role
ARN. Källkoden för klientapplikationer och deras paketerade versioner är tillgängliga i GitHub repository.
Kör programmet ConsumerApp-1
Att köra ConsumerApp-1
ansökan, slutför följande steg:
- På Amazon EC2-konsolen väljer du
ConsumerApp-1
EC2-instans och välj Kontakta. - På Sessionshanteraren fliken, välj Kontakta.
- Kör följande kommandon på den nya fliken som öppnas i din webbläsare:
- Kör
ConsumerApp-1
applikation att börja konsumera meddelanden frånTopic-B
:
Du kan hitta källkod på GitHub för din referens. Kommandoradsparameterns detaljer är följande:
- –bootstrap-servrar – MSK kluster bootstrap mäklare IAM slutpunkt.
- –anta-roll-arn -
Topic-B-Read-Role
IAM roll ARN. Om man tar på sig denna roll,ConsumerApp-1
kommer att läsa meddelanden från ämnet. - -område – Region du använder.
- –ämnesnamn – Ämnesnamn varifrån
ConsumerApp-1
kommer att läsa meddelanden. Standard ärTopic-B
. - –konsumentgrupp – Konsumentgruppsnamn för
ConsumerApp-1
, som specificerats under stackuppdateringen. - –rollsession-namn -
ConsumerApp-1
antarTopic-B-Read-Role
med AWS Security Token Service (AWS STS) SDK.ConsumerApp-1
kommer att använda detta rollsessionsnamn när du anroparassumeRole
funktion. - -Klient ID – Klient-ID för
ConsumerApp-1
. - –print-consumer-quota-metrics – Flagga som anger om klientmått ska skrivas ut på terminalen av
ConsumerApp-1
. - –cw-dimensionsnamn - amazoncloudwatch dimensionsnamn som kommer att användas för att publicera klientdrottningsstatistik från
ConsumerApp-1
. - –cw-dimension-värde – CloudWatch-dimensionsvärde som kommer att användas för att publicera klientdrottningsstatistik från
ConsumerApp-1
. - –cw-namnutrymme – Namnutrymme var
ConsumerApp-1
kommer att publicera CloudWatch-statistik för att övervaka strypning.
- Om du är nöjd med resten av parametrarna, använd följande kommando och ändra
--assume-role-arn
och--region
enligt din miljö:
Smakämnen fetch-throttle-time-avg
och fetch-throttle-time-max
klientmätvärden ska visa 0.0, vilket indikerar att ingen strypning förekommer för ConsumerApp-1
. Kom ihåg att vi inte har satt konsumtionskvoten för ConsumerApp-1
än. Låt det gå en stund.
Kör programmet ConsumerApp-2
Att köra ConsumerApp-2
ansökan, slutför följande steg:
- På Amazon EC2-konsolen väljer du
ConsumerApp-2
EC2-instans och välj Kontakta. - På Sessionshanteraren fliken, välj Kontakta.
- Kör följande kommandon på den nya fliken som öppnas i din webbläsare:
- Kör
ConsumerApp-2
applikation att börja konsumera meddelanden frånTopic-B
:
Koden har liknande kommandoradsparametrar detaljer som ConsumerApp-1
diskuterats tidigare, förutom följande:
- –konsumentgrupp – Konsumentgruppsnamn för
ConsumerApp-2
, som specificerats under stackuppdateringen. - –rollsession-namn -
ConsumerApp-2
antarTopic-B-Read-Role
använder AWS STS SDK.ConsumerApp-2
kommer att använda detta rollsessionsnamn när du anroparassumeRole
funktion. - -Klient ID – Klient-ID för
ConsumerApp-2
.
- Om du är nöjd med resten av parametrarna, använd följande kommando och ändra
--assume-role-arn
och--region
enligt din miljö:
Smakämnen fetch-throttle-time-avg
och fetch-throttle-time-max
klientmätvärden ska visa 0.0, vilket indikerar att ingen strypning förekommer för ConsumerApp-2
. Kom ihåg att vi inte har satt konsumtionskvoten för ConsumerApp-2
än. Låt det gå en stund.
Kör programmet ProducerApp-1
Att köra ProducerApp-1
ansökan, slutför följande steg:
- På Amazon EC2-konsolen väljer du
ProducerApp-1
EC2-instans och välj Kontakta. - På Sessionshanteraren fliken, välj Kontakta.
- Kör följande kommandon på den nya fliken som öppnas i din webbläsare:
- Kör
ProducerApp-1
applikation att börja skicka meddelanden tillTopic-B
:
Du kan hitta källkod på GitHub för din referens. Kommandoradsparameterns detaljer är följande:
- –bootstrap-servrar – MSK kluster bootstrap mäklare IAM slutpunkt.
- –anta-roll-arn -
Topic-B-Write-Role
IAM roll ARN. Om man tar på sig denna roll,ProducerApp-1
kommer att skriva meddelanden till ämnet. - –ämnesnamn -
ProducerApp-1
kommer att skicka meddelanden till detta ämne. Standard ärTopic-B
. - -område – AWS-region du använder.
- –antal-meddelanden – Antal meddelanden
ProducerApp-1
ansökan skickas till ämnet. - –rollsession-namn -
ProducerApp-1
antarTopic-B-Write-Role
använder AWS STS SDK.ProducerApp-1
kommer att använda detta rollsessionsnamn när du anroparassumeRole
funktion. - -Klient ID – Kund-ID för
ProducerApp-1
. - –producenttyp -
ProducerApp-1
kan köras antingen synkront or asynkront. Alternativ är synkronisera or async. - –tryck-producent-kvot-metrics – Flagga som anger om klientmåtten ska skrivas ut på terminalen av ProducerApp-1.
- –cw-dimensionsnamn – CloudWatch-dimensionsnamn som kommer att användas för att publicera klientdrottningsstatistik från ProducerApp-1.
- –cw-dimension-värde – CloudWatch-dimensionsvärde som kommer att användas för att publicera klientdrottningsstatistik från ProducerApp-1.
- –cw-namnutrymme – Namnutrymmet där ProducerApp-1 kommer att publicera CloudWatch-statistik för att övervaka strypning.
- Om du är nöjd med resten av parametrarna, använd följande kommando och ändra
--assume-role-arn
och--region
enligt din miljö. För att köra en synkron Kafka-producent använder den alternativet--producer-type sync
:
Alternativt kan du använda --producer-type async
att driva en asynkron producent. För mer information, se Asynkron sändning.
Smakämnen produce-throttle-time-avg
och produce-throttle-time-max
klientmätvärden ska visa 0.0, vilket indikerar att ingen strypning förekommer för ProducerApp-1
. Kom ihåg att vi inte har satt produktkvoten för ProducerApp-1
än. Kolla det ConsumerApp-1
och ConsumerApp-2
kan konsumera meddelanden och märka att de inte stryps. Stoppa konsument- och producentklientapplikationerna genom att trycka på Ctrl + C i sina respektive webbläsarflikar.
Ställ in producera och konsumera kvoter för klientapplikationer
Nu när vi har kört producent- och konsumentapplikationerna utan kvoter sätter vi deras kvoter och kör dem igen.
Öppna Sessionsansvarig terminal för MSKAdminInstance
EC2-instans som beskrivits tidigare och kör följande kommandon för att hitta standardkonfigurationen för en av mäklarna i MSK-klustret. MSK-kluster tillhandahålls med standard Kafka-kvotkonfigurationen.
Följande skärmdump visar Broker-1
standardvärden för quota.consumer.default
och quota.producer.default
.
ProducerApp-1-kvotkonfiguration
Ersätt platshållare i alla kommandon i det här avsnittet med värden som motsvarar ditt konto.
Enligt arkitekturdiagrammet som diskuterades tidigare, ställ in ProducerApp-1
producera kvot till 1024 byte/sekund. För <ProducerApp-1 Client Id>
och <ProducerApp-1 Role Session>
, se till att du använder samma värden som du använde när du körde ProducerApp-1
tidigare (producerapp-1-client-id
och producerapp-1-role-session
, respektive):
Verifiera ProducerApp-1
producera kvot med följande kommando:
Du kan ta bort ProducerApp-1
producera kvot genom att använda följande kommando, men kör inte kommandot eftersom vi ska testa kvoterna härnäst.
ConsumerApp-1-kvotkonfiguration
Ersätt platshållare i alla kommandon i det här avsnittet med värden som motsvarar ditt konto.
Låt oss ställa in en konsumtionskvot på 5120 byte/sekund för ConsumerApp-1
. För <ConsumerApp-1 Client Id>
och <ConsumerApp-1 Role Session>
, se till att du använder samma värden som du använde när du körde ConsumerApp-1
tidigare (consumerapp-1-client-id
och consumerapp-1-role-session
, respektive):
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>
Verifiera ConsumerApp-1
konsumera kvot med följande kommando:
Du kan ta bort ConsumerApp-1
konsumera kvot genom att använda följande kommando, men kör inte kommandot eftersom vi ska testa kvoterna härnäst.
ConsumerApp-2-kvotkonfiguration
Ersätt platshållare i alla kommandon i det här avsnittet med värden som motsvarar ditt konto.
Låt oss ställa in en konsumtionskvot på 1024 byte/sekund för ConsumerApp-2
. För <ConsumerApp-2 Client Id>
och <ConsumerApp-2 Role Session>
, se till att du använder samma värden som du använde när du körde ConsumerApp-2
tidigare (consumerapp-2-client-id
och consumerapp-2-role-session
, respektive):
Verifiera ConsumerApp-2
konsumera kvot med följande kommando:
Som med ConsumerApp-1
, kan du ta bort ConsumerApp-2
konsumera kvot med samma kommando med ConsumerApp-2
kund- och användarinformation.
Kör producent- och konsumentapplikationerna igen efter att ha ställt in kvoter
Låt oss köra applikationerna igen för att verifiera effekten av kvoterna.
Kör ProducerApp-1 igen
Repris ProducerApp-1
in synkron läge med samma kommando som du använde tidigare. Följande skärmdump visar att när ProducerApp-1
når sin kvot på någon av mäklarna, den produce-throttle-time-avg
och produce-throttle-time-max client
mätvärde kommer att vara över 0.0. Ett värde över 0.0 indikerar det ProducerApp-1
är strypt. Tillåta ProducerApp-1
att köra i några sekunder och sedan stoppa den genom att använda Ctrl + C.
Du kan också testa effekten av produktkvoten genom att köra om ProducerApp-1
in igen asynkron läge (--producer-type async
). I likhet med en synkron körning visar följande skärmdump att när ProducerApp-1
når sin kvot på någon av mäklarna, den produce-throttle-time-avg
och produce-throttle-time-max
kundmätvärden kommer att vara över 0.0. Ett värde över 0.0 indikerar det ProducerApp-1
är strypt. Tillåt asynkron ProducerApp-1
att springa en stund.
Du kommer så småningom att se en TimeoutException
anger org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
När du använder en asynkron producent och skicka meddelanden i en takt som är högre än vad mäklaren kan acceptera på grund av kvoten, kommer meddelandena att köas i klientapplikationens minne först. Klienten kommer så småningom att få slut på buffertutrymme om hastigheten för att skicka meddelanden fortsätter att överskrida hastigheten för att acceptera meddelanden, vilket orsakar nästa Producer.send()
samtalet ska blockeras. Producer.send()
kommer så småningom att kasta en TimeoutException
om timeoutfördröjningen inte är tillräcklig för att mäklaren ska hinna med producentansökan. Sluta ProducerApp-1
genom att använda Ctrl + C.
Kör ConsumerApp-1 igen
Repris ConsumerApp-1
med samma kommando som du använde tidigare. Följande skärmdump visar att när ConsumerApp-1
når sin kvot, den fetch-throttle-time-avg
och fetch-throttle-time-max client
mätvärde kommer att vara över 0.0. Ett värde över 0.0 indikerar det ConsumerApp-1
är strypt.
Tillåt ConsumerApp-1
att köra i några sekunder och sedan stoppa den genom att använda Ctrl + C.
Kör ConsumerApp-2 igen
Repris ConsumerApp-2
med samma kommando som du använde tidigare. Likaså när ConsumerApp-2
når sin kvot, den fetch-throttle-time-avg
och fetch-throttle-time-max client
mätvärde kommer att vara över 0.0. Ett värde ovanför 0.0 indikerar att ConsumerApp-2
är strypt. Tillåta ConsumerApp-2
att köra i några sekunder och stoppa den sedan genom att trycka på Ctrl + C.
Kundkvotsmått i Amazon CloudWatch
In del 1, förklarade vi att klientmått är mätvärden som exponeras av klienter som ansluter till Kafka-kluster. Låt oss undersöka kundmåtten i CloudWatch.
- Välj på CloudWatch-konsolen Alla mätvärden.
- Enligt Anpassade namnområden, välj namnutrymmet du angav när du körde klientprogrammen.
- Välj dimensionens namn och välj
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
ochfetch-throttle-time-avg metrics
för alla applikationer.
Dessa mätvärden indikerar strypningsbeteende för ProducerApp-1
, ConsumerApp-1
och ConsumerApp-2
applikationer som testades med kvotkonfigurationerna i föregående avsnitt. Följande skärmbilder indikerar strypningen av ProducerApp-1
, ConsumerApp-1
och ConsumerApp-2
baserat på nätverkets bandbreddskvoter. ProducerApp-1
, ConsumerApp-1
och ConsumerApp-2
applikationer matar sina respektive klientmått till CloudWatch. Du kan hitta källkod på GitHub för din referens.
Säkert klient-ID och rollsessionsnamn
Vi diskuterade hur man konfigurerar Kafka-kvoter med hjälp av en applikation Klient ID och autentiserade användare rektor. När en klientapplikation antar en IAM-roll för att komma åt Kafka-ämnen i ett MSK-kluster med IAM-autentisering aktiverad, autentiseras dess användare principal representeras i följande format (för mer information, se IAM-identifierare):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Den innehåller rollsessionens namn (I detta fall, producerapp-1-role-session
) som används i klientapplikationen samtidigt som man tar på sig en IAM-roll genom AWS STS SDK. Klientapplikationen källkod är tillgänglig för din referens. De Klient ID är en logisk namnsträng (t.ex. producerapp-1-client-id
) som konfigureras i applikationskoden av applikationsteamet. Därför kan en ansökan utge sig för att vara en annan ansökan om den erhåller Klient ID och rollsessionens namn av den andra applikationen och om den har tillstånd att ta på sig samma IAM-roll.
Som visas i arkitekturdiagrammet, ConsumerApp-1
och ConsumerApp-2
är två separata klientapplikationer med sina respektive kvoter. Eftersom båda har tillstånd att anta samma IAM-roll (Topic-B-Read-Role
) i demokontot får de konsumera meddelanden från Topic-B
. Således särskiljer MSK-klustermäklare dem utifrån deras klient-ID:n och användare (som innehåller sina respektive rollsessionens namn värden). Om ConsumerApp-2
på något sätt får ConsumerApp-1
rollsessionens namn och Klient ID, det kan imitera ConsumerApp-1
genom att ange ConsumerApp-1
rollsessionens namn och Klient ID i applikationskoden.
Låt oss anta ConsumerApp-1
användningar consumerapp-1-client-id
och consumerapp-1-role-session
som dess Klient ID och rollsessionens namn, respektive. Därför, ConsumerApp-1's
authenticated användare huvudmannen kommer att visas enligt följande när den antar att Topic-B-Read-Role
IAM roll:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
På liknande sätt ConsumerApp-2
användningar consumerapp-2-client-id
och consumerapp-2-role-session
som dess Klient ID och rollsessionens namn, respektive. Därför, ConsumerApp-2's
authenticated användare huvudmannen kommer att visas enligt följande när den antar att Topic-B-Read-Role
IAM roll:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
erhåller ConsumerApp-1's
Klient ID och rollsessionens namn och specificerar dem i sin applikationskod, kommer MSK-klustermäklare att behandla det som ConsumerApp-1
och se den Klient ID as consumerapp-1-client-id
, och den autentiserade användare huvudman enligt följande:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Det här tillåter ConsumerApp-2
att konsumera data från MSK-klustret med en maximal hastighet av 5120 byte per sekund snarare än 1024 byte per sekund enligt dess ursprungliga kvotallokering. Följaktligen, ConsumerApp-1's
genomströmningen kommer att påverkas negativt om ConsumerApp-2
körs samtidigt.
Förbättrad arkitektur
Du kan presentera AWS Secrets Manager och AWS nyckelhanteringstjänst (AWS KMS) i arkitekturen för att säkra applikationer' klient-ID:n och rollsessionsnamn. För att ge starkare styrning måste applikationernas klient-ID och rollsessionsnamn lagras som krypterade hemligheter i Secrets Manager. IAM-resurspolicyerna förknippade med krypterade hemligheter och en KMS-kundhanterad nyckel (CMK) kommer att tillåta applikationer att få åtkomst till och dekryptera endast deras respektive klient-ID och rollsessionsnamn. På detta sätt kommer applikationer inte att kunna komma åt varandras klient-ID och rollsessionsnamn och imitera varandra. Följande bild visar den förbättrade arkitekturen.
Det uppdaterade flödet har följande steg:
- P1 -
ProducerApp-1
hämtar sinclient-id
ochrole-session-name
hemligheter från Secrets Manager - P2 -
ProducerApp-1
konfigurerar hemlighetenclient-id
asCLIENT_ID_CONFIG
i applikationskoden och antarTopic-B-Write-Role
(via dessProducerApp-1-Role
IAM roll) genom att förmedla hemlighetenrole-session-name
till AWS STS SDKassumeRole
funktionssamtal - P3 - Med
Topic-B-Write-Role
IAM-rollen antogs,ProducerApp-1
börjar skicka meddelanden tillTopic-B
- C1 -
ConsumerApp-1
ochConsumerApp-2
hämta sina respektiveclient-id
ochrole-session-name
hemligheter från Secrets Manager - C2 -
ConsumerApp-1
ochConsumerApp-2
konfigurera deras respektive hemlighetclient-id
asCLIENT_ID_CONFIG
i sin applikationskod och antarTopic-B-Write-Role
(viaConsumerApp-1-Role
ochConsumerApp-2-Role
IAM-roller) genom att förmedla deras hemlighetrole-session-name
i AWS STS SDKassumeRole
funktionssamtal - C3 - Med
Topic-B-Read-Role
IAM-rollen antogs,ConsumerApp-1
ochConsumerApp-2
börja konsumera meddelanden frånTopic-B
Se dokumentationen för AWS Secrets Manager och AWS KMS för att få en bättre förståelse för hur de passar in i arkitekturen.
Rengör resurser
Navigera till CloudFormation-konsolen och ta bort MSKStack
stack. Alla resurser som skapas under detta inlägg kommer att raderas.
Slutsats
I det här inlägget täckte vi detaljerade steg för att konfigurera Amazon MSK-kvoter och visade deras effekt genom exempel på klientapplikationer. Dessutom diskuterade vi hur du kan använda klientmått för att avgöra om en klientapplikation är strypt. Vi lyfte också fram ett potentiellt problem med klient-ID:n i klartext och rollsessionsnamn. Vi rekommenderar att du implementerar Kafka-kvoter med Amazon MSK med Secrets Manager och AWS KMS enligt det reviderade arkitekturdiagrammet för att säkerställa en noll-trust-arkitektur.
Om du har feedback eller frågor om det här inlägget, inklusive den reviderade arkitekturen, hör vi gärna från dig. Vi hoppas att du tyckte om att läsa det här inlägget.
Om författaren
Vikas Bajaj är Senior Manager, Solutions Architects, Financial Services på Amazon Web Services. Med över två decenniers erfarenhet av finansiella tjänster och att arbeta med digitala företag, ger han råd till kunder om produktdesign, tekniska färdplaner och applikationsarkitekturer.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- EVM Finans. Unified Interface for Decentralized Finance. Tillgång här.
- Quantum Media Group. IR/PR förstärkt. Tillgång här.
- PlatoAiStream. Web3 Data Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- : har
- :är
- :inte
- :var
- $UPP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Able
- Om oss
- ovan
- Acceptera
- acceptera
- tillgång
- Konto
- bekräfta
- tvärs
- lägga till
- Dessutom
- Annat
- Dessutom
- Efter
- igen
- Alla
- fördelning
- tilldelningar
- tillåter
- tillåter
- också
- amason
- Amazon EC2
- Amazon Web Services
- an
- och
- Annan
- vilken som helst
- Apache
- Apache Kafka
- visas
- Ansökan
- tillämpningar
- cirka
- arkitektur
- ÄR
- AS
- associerad
- antas
- At
- authenticated
- Autentisering
- tillgänglig
- AWS
- AWS molnformation
- Bandbredd
- baserat
- BE
- därför att
- varit
- innan
- Där vi får lov att vara utan att konstant prestera,
- Bättre
- blockerad
- Bootstrap
- båda
- Botten
- Box
- mäklare
- mäklare
- webbläsare
- buffert
- företag
- företag
- men
- by
- Ring
- kallas
- anropande
- KAN
- Vid
- KATT
- brottning
- orsakar
- CD
- centrala
- byta
- Förändringar
- ta
- Välja
- klass
- klient
- klienter
- kluster
- koda
- Gemensam
- fullborda
- Compute
- Begreppen
- konfiguration
- konfigurerad
- Anslutning
- Följaktligen
- Konsol
- konsumera
- Konsumenten
- innehåller
- fortsätta
- fortsätter
- fortsätter
- kontroll
- omfattas
- skapa
- skapas
- Skapa
- Aktuella
- kund
- Kunder
- datum
- Dataplattform
- årtionden
- Avkryptera
- Standard
- fördröja
- demo
- demonstreras
- beroende
- beskriva
- beskriven
- Designa
- detaljerad
- detaljer
- Bestämma
- bestämd
- Dimensionera
- diskuteras
- Visa
- skilja på
- dokumentation
- ladda ner
- grund
- under
- varje
- Tidigare
- missar
- effekt
- antingen
- möjliggöra
- aktiverad
- möjliggör
- krypterad
- Slutpunkt
- förstärka
- förbättrad
- säkerställa
- ange
- Miljö
- fel
- Eter (ETH)
- så småningom
- undersöka
- exempel
- överstiga
- Utom
- erfarenhet
- förklarade
- förklaring
- export
- utsatta
- återkoppling
- få
- Figur
- Fil
- Filer
- finansiella
- finansiella tjänster
- hitta
- Förnamn
- passa
- flöda
- efter
- följer
- För
- format
- fyra
- från
- fungera
- Vidare
- skaffa sig
- gå
- GitHub
- styrning
- större
- Grupp
- Gruppens
- lyckligt
- Har
- he
- höra
- högnivå
- Markerad
- hoppas
- värd
- värdar
- Hur ser din drömresa ut
- How To
- html
- http
- HTTPS
- IAM
- ID
- Identitet
- ids
- if
- illustrerar
- bild
- påverkade
- genomförande
- genomföra
- in
- Inklusive
- indikerar
- pekar på
- indikerar
- individuellt
- informationen
- exempel
- integrerad
- in
- införa
- introducerade
- isn
- fråga
- IT
- DESS
- java
- jpg
- kafka
- Nyckel
- känd
- BEGRÄNSA
- linje
- rader
- Lista
- logisk
- göra
- förvaltade
- ledning
- chef
- maximal
- Maj..
- mätt
- Minne
- meddelanden
- Metrics
- minuter
- Mode
- modifiera
- Övervaka
- mer
- MS
- mycket
- multipel
- måste
- namn
- namn
- Navigera
- Navigering
- Behöver
- negativt
- nät
- Nya
- Nästa
- Nej
- noterade
- Lägga märke till..
- antal
- erhåller
- förekommande
- of
- on
- ONE
- endast
- öppnas
- drivs
- Verksamhet
- Alternativet
- Tillbehör
- or
- beställa
- ursprungliga
- Övriga
- ut
- över
- förpackade
- sida
- panelen
- parameter
- parametrar
- del
- Godkänd
- Förbi
- bana
- procentuell
- utföra
- prestanda
- tillstånd
- Oformatterad text
- plattform
- plato
- Platon Data Intelligence
- PlatonData
- Punkt
- poäng
- Strategier
- policy
- Inlägg
- potentiell
- trycka
- förhindra
- föregående
- tidigare
- Principal
- privat
- bearbetning
- producera
- producent
- Produkt
- produktdesign
- egenskaper
- ge
- förutsatt
- allmän
- publicera
- frågor
- Betygsätta
- snarare
- når
- Läsa
- Läsning
- rekommenderar
- rekommenderas
- avses
- region
- ihåg
- ta bort
- ersätta
- Repository
- representerade
- begära
- förfrågningar
- Obligatorisk
- resurs
- Resurser
- att
- respektive
- REST
- färdplaner
- Roll
- roller
- Körning
- rinnande
- s
- Samma
- nöjd
- nöjd med
- skärmdumpar
- sDK
- Andra
- sekunder
- Secret
- §
- säkra
- säkerhet
- säkerhetstoken
- se
- sända
- skicka
- senior
- separat
- Serier
- Tjänster
- session
- in
- inställning
- inställningar
- skall
- visas
- Visar
- liknande
- Liknande
- eftersom
- Lösningar
- Källa
- källkod
- Utrymme
- specifik
- specificerade
- stapel
- stadier
- starta
- igång
- Steg
- Steg
- Sluta
- lagras
- streaming
- Sträng
- starkare
- subnät
- senare
- Framgångsrikt
- sådana
- tillräcklig
- levereras
- Stöder
- Ta
- grupp
- Teknologi
- mall
- mallar
- terminal
- testa
- testade
- Testning
- än
- den där
- Smakämnen
- källan
- deras
- Dem
- sedan
- därför
- de
- detta
- tre
- Genom
- genomströmning
- tid
- till
- token
- ämne
- ämnen
- behandla
- Litar
- två
- Typ
- typer
- förståelse
- Uppdatering
- uppdaterad
- uppdatering
- användning
- Begagnade
- Användare
- användare
- användningar
- med hjälp av
- värde
- Värden
- verifiera
- via
- utsikt
- var
- Sätt..
- we
- webb
- webbservice
- VÄL
- när
- om
- som
- medan
- kommer
- med
- utan
- arbetssätt
- skriva
- ännu
- dig
- Din
- zephyrnet