Kafka-Kontingente sind ein wesentlicher Bestandteil von Kafka-Clustern mit mehreren Mandanten. Sie verhindern, dass die Leistung des Kafka-Clusters durch schlecht funktionierende Anwendungen, die Clusterressourcen übermäßig verbrauchen, beeinträchtigt wird. Darüber hinaus ermöglichen sie den Betrieb der zentralen Streaming-Datenplattform als mandantenfähige Plattform und die Nutzung durch Downstream- und Upstream-Anwendungen über mehrere Geschäftsbereiche hinweg. Kafka unterstützt zwei Arten von Quoten: Netzwerkbandbreitenkontingente und Tarifkontingente anfordern. Netzwerkbandbreitenkontingente definieren Schwellenwerte für die Byterate, z. B. wie viele Daten Clientanwendungen für jeden einzelnen Broker in einem Kafka-Cluster produzieren und von jedem einzelnen Broker in einem Kafka-Cluster verbrauchen können, gemessen in Bytes pro Sekunde. Anforderungsratenkontingente begrenzen den Prozentsatz der Zeit, die jeder einzelne Broker mit der Bearbeitung von Clientanwendungsanforderungen verbringt. Abhängig von Ihrer Konfiguration können Kafka-Kontingente für bestimmte Benutzer, bestimmte Client-IDs oder beides festgelegt werden.
In Teil 1 In dieser zweiteiligen Serie haben wir die Konzepte zur Durchsetzung von Kafka-Quoten diskutiert Amazon Managed Streaming für Apache Kafka (Amazon MSK)-Cluster während der Verwendung AWS Identity and Access Management and (IAM) Zugangskontrolle.
In diesem Beitrag führen wir Sie Schritt für Schritt durch die Implementierung der Einrichtung von Kafka-Kontingenten in einem MSK-Cluster unter Verwendung der IAM-Zugriffskontrolle und testen sie anhand von Beispiel-Clientanwendungen.
Lösungsüberblick
Die folgende Abbildung, die wir erstmals vorgestellt haben Teil 1, veranschaulicht, wie Kafka-Clientanwendungen (ProducerApp-1
, ConsumerApp-1
und ConsumerApp-2
) Zugang Topic-B
im MSK-Cluster durch Übernahme der IAM-Rollen „Schreiben“ und „Lesen“. Jede Producer- und Consumer-Clientanwendung verfügt über ein Kontingent, das bestimmt, wie viele Daten sie in Bytes/Sekunde produzieren oder verbrauchen können. Der ProducerApp-1
Das Kontingent ermöglicht die Produktion von bis zu 1024 Bytes/Sekunde pro Broker. Ebenso die ConsumerApp-1
und ConsumerApp-2
Kontingente ermöglichen es ihnen, 5120 bzw. 1024 Bytes/Sekunde pro Broker zu verbrauchen. Im Folgenden finden Sie eine kurze Erläuterung des im Architekturdiagramm dargestellten Ablaufs:
- P1 -
ProducerApp-1
(über seineProducerApp-1-Role
IAM-Rolle) übernimmt dieTopic-B-Write-Role
IAM-Rolle, an die Nachrichten gesendet werden sollenTopic-B
- P2 - Mit der
Topic-B-Write-Role
IAM-Rolle übernommen,ProducerApp-1
beginnt mit dem Senden von Nachrichten anTopic-B
- C1 -
ConsumerApp-1
(über seineConsumerApp-1-Role
IAM-Rolle) undConsumerApp-2
(über seineConsumerApp-2-Role
IAM-Rolle) übernehmen dieTopic-B-Read-Role
IAM-Rolle zum Lesen von NachrichtenTopic-B
- C2 - Mit der
Topic-B-Read-Role
IAM-Rolle übernommen,ConsumerApp-1
undConsumerApp-2
Fangen Sie an, Nachrichten von zu konsumierenTopic-B
Beachten Sie, dass in diesem Beitrag das verwendet wird AWS-Befehlszeilenschnittstelle (AWS-CLI), AWS CloudFormation Vorlagen und die AWS-Managementkonsole für die Bereitstellung und Änderung von AWS-Ressourcen. Die bereitgestellten Ressourcen werden Ihrem AWS-Konto in Rechnung gestellt.
Die High-Level-Schritte sind wie folgt:
- Stellen Sie einen MSK-Cluster mit IAM-Zugriffskontrolle bereit und Amazon Elastic Compute-Cloud (Amazon EC2) Instanzen für Clientanwendungen.
- Erstellen
Topic-B
auf dem MSK-Cluster. - Erstellen Sie IAM-Rollen, auf die die Clientanwendungen zugreifen können
Topic-B
. - Führen Sie die Producer- und Consumer-Anwendungen aus, ohne Quoten festzulegen.
- Konfigurieren Sie die Produktions- und Verbrauchskontingente für die Clientanwendungen.
- Führen Sie die Anwendungen erneut aus, nachdem Sie die Kontingente festgelegt haben.
Voraussetzungen:
Es wird empfohlen, dass Sie es lesen Teil 1 dieser Serie, bevor Sie fortfahren. Um loszulegen, benötigen Sie Folgendes:
- Ein AWS-Konto, das in diesem Beitrag als Demokonto bezeichnet wird, vorausgesetzt, dass seine Konto-ID lautet
1111 1111 1111
- Berechtigungen zum Erstellen, Löschen und Ändern von AWS-Ressourcen im Demokonto
Stellen Sie einen MSK-Cluster mit IAM-Zugriffskontrolle und EC2-Instanzen bereit
Dieser Schritt umfasst die Bereitstellung eines MSK-Clusters mit IAM-Zugriffskontrolle in einer VPC im Demokonto. Darüber hinaus erstellen wir vier EC2-Instanzen, um Konfigurationsänderungen am MSK-Cluster und Host-Produzenten- und Verbraucher-Client-Anwendungen vorzunehmen.
Stellen Sie den CloudFormation-Stack bereit
- Klonen Sie die GitHub-Repository So laden Sie die CloudFormation-Vorlagendateien und Beispiel-Clientanwendungen herunter:
- Wählen Sie in der AWS CloudFormation-Konsole aus Stacks im Navigationsbereich.
- Auswählen Stapel erstellen.
- Aussichten für Vorlage vorbereitenWählen Vorlage ist fertig.
- Aussichten für VorlagenquelleWählen Laden Sie eine Vorlagendatei hoch.
- Laden Sie die
cfn-msk-stack-1.yaml
Datei vonamazon-msk-kafka-quotas/cfn-templates
Verzeichnis auswählen und dann auswählen Weiter. - Aussichten für Stapelname, eingeben
MSKStack
. - Belassen Sie die Parameter als Standard und wählen Sie Weiter.
- Scrollen Sie zum Ende des Konfigurieren Sie die Stapeloptionen Seite und wählen Weiter um fortzufahren.
- Scrollen Sie zum Ende des Bewertung Aktivieren Sie auf der Seite das Kontrollkästchen Ich erkenne an, dass CloudFormation IAM-Ressourcen erstellen kann, und wähle Absenden.
Es dauert etwa 30 Minuten, bis der Stapel fertig ist. Nachdem der Stack erfolgreich erstellt wurde, werden die folgenden Ressourcen erstellt:
- Eine VPC mit drei privaten Subnetzen und einem öffentlichen Subnetz
- Ein MSK-Cluster mit drei Brokern mit aktivierter IAM-Zugriffskontrolle
- Eine aufgerufene EC2-Instanz
MSKAdminInstance
zum Ändern von MSK-Clustereinstellungen sowie zum Erstellen und Ändern von AWS-Ressourcen - EC2-Instanzen für
ProducerApp-1
,ConsumerApp-1
undConsumerApp-2
, eine für jede Clientanwendung - Eine separate IAM-Rolle für jede EC2-Instanz, die die Clientanwendung hostet, wie im Architekturdiagramm dargestellt
- Aus dem Stapel Ausgänge Beachten Sie die Registerkarte
MSKClusterArn
Wert.
Erstellen Sie ein Thema im MSK-Cluster
Erschaffen Topic-B
Führen Sie im MSK-Cluster die folgenden Schritte aus:
- Navigieren Sie in der Amazon EC2-Konsole zu Ihrer Liste der ausgeführten EC2-Instances.
- Wähle aus
MSKAdminInstance
EC2-Instanz und wählen Sie Vernetz Dich. - Auf dem Session Manager Tab, wählen Sie Vernetz Dich.
- Führen Sie die folgenden Befehle auf der neuen Registerkarte aus, die in Ihrem Browser geöffnet wird:
- Legen Sie die Umgebungsvariable so fest, dass sie auf den IAM-Endpunkt des MSK-Cluster-Brokers verweist:
- Beachten Sie den Wert von
BOOTSTRAP_BROKERS_IAM
. - Führen Sie zum Erstellen den folgenden Kafka-CLI-Befehl aus
Topic-B
auf dem MSK-Cluster:
Da der MSK-Cluster mit IAM-Zugriffskontrolle ausgestattet ist, ist dies die Option --command-config
Punkte auf config_iam.properties
, das die für die IAM-Zugriffskontrolle erforderlichen Eigenschaften enthält, erstellt von MSKStack
CloudFormation-Stack.
Die folgenden Warnungen werden möglicherweise angezeigt, wenn Sie die Kafka-CLI-Befehle ausführen, Sie können sie jedoch ignorieren:
- Um das zu überprüfen
Topic-B
wurde erstellt, alle Themen auflisten:
Erstellen Sie IAM-Rollen für Clientanwendungen, um auf Thema B zuzugreifen
Dieser Schritt umfasst das Erstellen Topic-B-Write-Role
und Topic-B-Read-Role
wie im Architekturdiagramm dargestellt. Topic-B-Write-Role
ermöglicht Schreibvorgänge auf Topic-B
, und kann von der angenommen werden ProducerApp-1
. In ähnlicher Weise ist die ConsumerApp-1
und ConsumerApp-2
kann davon ausgehen Topic-B-Read-Role
um Lesevorgänge durchzuführen Topic-B
. Um Lesevorgänge durchzuführen Topic-B
, ConsumerApp-1
und ConsumerApp-2
müssen auch zu den im Rahmen der angegebenen Verbrauchergruppen gehören MSKStack
Stapelaktualisierung im nächsten Schritt.
Erstellen Sie die Rollen mit den folgenden Schritten:
- Wählen Sie in der AWS CloudFormation-Konsole aus Stacks im Navigationsbereich.
- Auswählen
MSKStack
und wählen Sie Aktualisierung. - Aussichten für Vorlage vorbereiten, wählen Sie Aktuelle Vorlage ersetzen.
- Aussichten für VorlagenquelleWählen Laden Sie eine Vorlagendatei hoch.
- Laden Sie die
cfn-msk-stack-2.yaml
Datei vonamazon-msk-kafka-quotas/cfn-templates
Verzeichnis auswählen und dann auswählen Weiter. - Geben Sie die folgenden zusätzlichen Stack-Parameter an:
-
- Aussichten für Thema B ARN, geben Sie die
Topic-B
RNS.
- Aussichten für Thema B ARN, geben Sie die
Der ARN muss formatiert sein als arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Verwenden Sie den Clusternamen und die Cluster-UUID aus dem zuvor notierten MSK-Cluster-ARN und geben Sie Ihre AWS-Region an. Weitere Informationen finden Sie im IAM-Zugriffskontrolle für Amazon MSK.
-
- Aussichten für ConsumerApp-1 Name der Verbrauchergruppe, eingeben
ConsumerApp-1
Verbrauchergruppe ARN.
- Aussichten für ConsumerApp-1 Name der Verbrauchergruppe, eingeben
Es muss formatiert sein als arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Aussichten für ConsumerApp-2 Name der Verbrauchergruppe, eingeben
ConsumerApp-2
Verbrauchergruppe ARN.
- Aussichten für ConsumerApp-2 Name der Verbrauchergruppe, eingeben
Verwenden Sie ein ähnliches Format wie der vorherige ARN.
- Auswählen Weiter um fortzufahren.
- Scrollen Sie zum Ende des Stack konfigurieren Optionsseite und wählen Sie Weiter um fortzufahren.
- Scrollen Sie zum Ende des Bewertung Aktivieren Sie auf der Seite das Kontrollkästchen Ich erkenne an, dass CloudFormation IAM-Ressourcen erstellen kann, und wähle Stapel aktualisieren.
Die Aktualisierung des Stacks dauert etwa 3 Minuten. Nachdem der Stack erfolgreich aktualisiert wurde, werden die folgenden Ressourcen erstellt:
- Topic-B-Write-Rolle – Eine IAM-Rolle mit der Berechtigung zum Ausführen von Schreibvorgängen
Topic-B
. Seine Vertrauensrichtlinie ermöglicht dieProducerApp-1-Role
IAM-Rolle, um es zu übernehmen. - Topic-B-Read-Rolle – Eine IAM-Rolle mit der Berechtigung zum Ausführen von Lesevorgängen
Topic-B
. Seine Vertrauensrichtlinie ermöglicht dieConsumerApp-1-Role
undConsumerApp-2-Role
IAM-Rollen übernehmen dies. Außerdem,ConsumerApp-1
undConsumerApp-2
müssen auch zu den Verbrauchergruppen gehören, die Sie beim Aktualisieren des Stapels angegeben haben, um Lesevorgänge auszuführenTopic-B
.
- Aus dem Stapel Ausgänge Beachten Sie die Registerkarte
TopicBReadRoleARN
undTopicBWriteRoleARN
Werte.
Führen Sie die Producer- und Consumer-Anwendungen aus, ohne Quoten festzulegen
Hier laufen wir ProducerApp-1
, ConsumerApp-1
und ConsumerApp-2
ohne ihre Quoten festzulegen. Von den vorherigen Schritten benötigen Sie BOOTSTRAP_BROKERS_IAM
Wert, Topic-B-Write-Role
ARN und Topic-B-Read-Role
ARN. Der Quellcode der Clientanwendungen und deren Paketversionen sind im verfügbar GitHub-Repository.
Führen Sie die ConsumerApp-1-Anwendung aus
So führen die ConsumerApp-1
Führen Sie zur Antragstellung die folgenden Schritte aus:
- Wählen Sie auf der Amazon EC2-Konsole die aus
ConsumerApp-1
EC2-Instanz und wählen Sie Vernetz Dich. - Auf dem Session Manager Tab, wählen Sie Vernetz Dich.
- Führen Sie die folgenden Befehle auf der neuen Registerkarte aus, die in Ihrem Browser geöffnet wird:
- Führen Sie die
ConsumerApp-1
Anwendung, von der aus Nachrichten konsumiert werden sollenTopic-B
:
Sie finden die Quellcode auf GitHub als Referenz. Die Details der Befehlszeilenparameter lauten wie folgt:
- –Bootstrap-Server – IAM-Endpunkt für MSK-Cluster-Bootstrap-Broker.
- –übernehmen-rolle-arn -
Topic-B-Read-Role
IAM-Rollen-ARN. Diese Rolle übernehmend,ConsumerApp-1
liest Nachrichten aus dem Thema. - -Region – Region, die Sie verwenden.
- -Themenname – Themenname, von dem
ConsumerApp-1
wird Nachrichten lesen. Die Standardeinstellung istTopic-B
. - –Verbrauchergruppe – Name der Verbrauchergruppe für
ConsumerApp-1
, wie bei der Stapelaktualisierung angegeben. - –Rollensitzungsname -
ConsumerApp-1
geht davon aus, dassTopic-B-Read-Role
Verwendung der AWS-Sicherheitstoken-Service (AWS STS) SDK.ConsumerApp-1
verwendet diesen Rollensitzungsnamen beim Aufrufen vonassumeRole
Funktion. - -Kunden ID – Kunden-ID für
ConsumerApp-1
. - –print-consumer-quota-metrics – Flag, das angibt, ob Client-Metriken auf dem Terminal gedruckt werden sollen
ConsumerApp-1
. - –CW-Dimensionsname - Amazon CloudWatch Dimensionsname, der zum Veröffentlichen von Client-Drosselungsmetriken verwendet wird
ConsumerApp-1
. - –cw-Dimensionswert – CloudWatch-Dimensionswert, der zum Veröffentlichen von Client-Drosselungsmetriken verwendet wird
ConsumerApp-1
. - –cw-Namespace – Namensraum wo
ConsumerApp-1
wird CloudWatch-Metriken veröffentlichen, um die Drosselung zu überwachen.
- Wenn Sie mit den restlichen Parametern zufrieden sind, verwenden Sie den folgenden Befehl und ändern Sie ihn
--assume-role-arn
und--region
entsprechend Ihrer Umgebung:
Das fetch-throttle-time-avg
und fetch-throttle-time-max
Die Client-Metriken sollten 0.0 anzeigen, was darauf hinweist, dass keine Drosselung erfolgt ConsumerApp-1
. Denken Sie daran, dass wir das Verbrauchskontingent nicht festgelegt haben ConsumerApp-1
noch. Lassen Sie es eine Weile laufen.
Führen Sie die ConsumerApp-2-Anwendung aus
So führen die ConsumerApp-2
Führen Sie zur Antragstellung die folgenden Schritte aus:
- Wählen Sie auf der Amazon EC2-Konsole die aus
ConsumerApp-2
EC2-Instanz und wählen Sie Vernetz Dich. - Auf dem Session Manager Tab, wählen Sie Vernetz Dich.
- Führen Sie die folgenden Befehle auf der neuen Registerkarte aus, die in Ihrem Browser geöffnet wird:
- Führen Sie die
ConsumerApp-2
Anwendung, von der aus Nachrichten konsumiert werden sollenTopic-B
:
Der Code verfügt über ähnliche Details zu den Befehlszeilenparametern wie ConsumerApp-1
zuvor besprochen, mit Ausnahme der folgenden:
- –Verbrauchergruppe – Name der Verbrauchergruppe für
ConsumerApp-2
, wie bei der Stapelaktualisierung angegeben. - –Rollensitzungsname -
ConsumerApp-2
geht davon aus, dassTopic-B-Read-Role
unter Verwendung des AWS STS SDK.ConsumerApp-2
verwendet diesen Rollensitzungsnamen beim Aufrufen vonassumeRole
Funktion. - -Kunden ID – Kunden-ID für
ConsumerApp-2
.
- Wenn Sie mit den restlichen Parametern zufrieden sind, verwenden Sie den folgenden Befehl und ändern Sie ihn
--assume-role-arn
und--region
entsprechend Ihrer Umgebung:
Das fetch-throttle-time-avg
und fetch-throttle-time-max
Die Client-Metriken sollten 0.0 anzeigen, was darauf hinweist, dass keine Drosselung erfolgt ConsumerApp-2
. Denken Sie daran, dass wir das Verbrauchskontingent nicht festgelegt haben ConsumerApp-2
noch. Lassen Sie es eine Weile laufen.
Führen Sie die ProducerApp-1-Anwendung aus
So führen die ProducerApp-1
Führen Sie zur Antragstellung die folgenden Schritte aus:
- Wählen Sie auf der Amazon EC2-Konsole die aus
ProducerApp-1
EC2-Instanz und wählen Sie Vernetz Dich. - Auf dem Session Manager Tab, wählen Sie Vernetz Dich.
- Führen Sie die folgenden Befehle auf der neuen Registerkarte aus, die in Ihrem Browser geöffnet wird:
- Führen Sie die
ProducerApp-1
Anwendung, an die Nachrichten gesendet werden sollenTopic-B
:
Sie finden die Quellcode auf GitHub als Referenz. Die Details der Befehlszeilenparameter lauten wie folgt:
- –Bootstrap-Server – IAM-Endpunkt für MSK-Cluster-Bootstrap-Broker.
- –übernehmen-rolle-arn -
Topic-B-Write-Role
IAM-Rollen-ARN. Diese Rolle übernehmend,ProducerApp-1
wird Nachrichten zum Thema schreiben. - -Themenname -
ProducerApp-1
wird Nachrichten zu diesem Thema senden. Die Standardeinstellung istTopic-B
. - -Region – AWS-Region, die Sie verwenden.
- –Anzahl-Nachrichten – Anzahl der Nachrichten
ProducerApp-1
Die Bewerbung wird an das Thema gesendet. - –Rollensitzungsname -
ProducerApp-1
geht davon aus, dassTopic-B-Write-Role
unter Verwendung des AWS STS SDK.ProducerApp-1
verwendet diesen Rollensitzungsnamen beim Aufrufen vonassumeRole
Funktion. - -Kunden ID – Kunden-ID von
ProducerApp-1
. - –Produzententyp -
ProducerApp-1
kann entweder ausgeführt werden synchron or asynchron. Optionen sind synchronisieren or async. - –print-producer-quota-metrics – Flag, das angibt, ob die Client-Metriken auf dem Terminal gedruckt werden sollen ProducerApp-1.
- –CW-Dimensionsname – CloudWatch-Dimensionsname, der zum Veröffentlichen von Client-Drosselungsmetriken verwendet wird ProducerApp-1.
- –cw-Dimensionswert – CloudWatch-Dimensionswert, der zum Veröffentlichen von Client-Drosselungsmetriken verwendet wird ProducerApp-1.
- –cw-Namespace – Der Namespace wo ProducerApp-1 wird CloudWatch-Metriken veröffentlichen, um die Drosselung zu überwachen.
- Wenn Sie mit den restlichen Parametern zufrieden sind, verwenden Sie den folgenden Befehl und ändern Sie ihn
--assume-role-arn
und--region
entsprechend Ihrer Umgebung. Um einen synchronen Kafka-Produzenten auszuführen, verwendet er die Option--producer-type sync
:
Alternativ verwenden --producer-type async
um einen asynchronen Produzenten auszuführen. Weitere Einzelheiten finden Sie unter Asynchrones Senden.
Das produce-throttle-time-avg
und produce-throttle-time-max
Die Client-Metriken sollten 0.0 anzeigen, was darauf hinweist, dass keine Drosselung erfolgt ProducerApp-1
. Denken Sie daran, dass wir keine Produktionsquote festgelegt haben ProducerApp-1
noch. Prüfe das ConsumerApp-1
und ConsumerApp-2
kann Nachrichten konsumieren und feststellen, dass sie nicht gedrosselt werden. Stoppen Sie die Consumer- und Producer-Client-Anwendungen, indem Sie drücken Strg + C in den jeweiligen Browser-Registerkarten.
Legen Sie Produktions- und Verbrauchskontingente für Clientanwendungen fest
Nachdem wir die Producer- und Consumer-Anwendungen nun ohne Kontingente ausgeführt haben, legen wir ihre Kontingente fest und führen sie erneut aus.
Öffnen Sie den Microsoft Store auf Ihrem Windows-PC. Sitzungsmanager Endgerät für die MSKAdminInstance
Erstellen Sie wie zuvor beschrieben eine EC2-Instanz und führen Sie die folgenden Befehle aus, um die Standardkonfiguration eines der Broker im MSK-Cluster zu ermitteln. MSK-Cluster werden mit der standardmäßigen Kafka-Kontingentkonfiguration bereitgestellt.
Der folgende Screenshot zeigt die Broker-1
Standardwerte für quota.consumer.default
und quota.producer.default
.
ProducerApp-1-Kontingentkonfiguration
Ersetzen Sie Platzhalter in allen Befehlen in diesem Abschnitt durch Werte, die Ihrem Konto entsprechen.
Legen Sie gemäß dem zuvor besprochenen Architekturdiagramm fest ProducerApp-1
Erzeugen Sie ein Kontingent von 1024 Bytes/Sekunde. Für <ProducerApp-1 Client Id>
und <ProducerApp-1 Role Session>
Stellen Sie sicher, dass Sie dieselben Werte verwenden, die Sie beim Ausführen verwendet haben ProducerApp-1
früher (producerapp-1-client-id
und producerapp-1-role-session
, beziehungsweise):
Überprüfen Sie die ProducerApp-1
Erstellen Sie ein Kontingent mit dem folgenden Befehl:
Sie können das entfernen ProducerApp-1
Erstellen Sie ein Kontingent, indem Sie den folgenden Befehl verwenden, aber Führen Sie den Befehl nicht aus da wir als nächstes die Quoten testen werden.
ConsumerApp-1-Kontingentkonfiguration
Ersetzen Sie Platzhalter in allen Befehlen in diesem Abschnitt durch Werte, die Ihrem Konto entsprechen.
Legen wir eine Verbrauchsquote von 5120 Bytes/Sekunde fest ConsumerApp-1
. For <ConsumerApp-1 Client Id>
und <ConsumerApp-1 Role Session>
Stellen Sie sicher, dass Sie dieselben Werte verwenden, die Sie beim Ausführen verwendet haben ConsumerApp-1
früher (consumerapp-1-client-id
und consumerapp-1-role-session
, beziehungsweise):
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>
Überprüfen Sie die ConsumerApp-1
Verbrauchen Sie das Kontingent mit dem folgenden Befehl:
Sie können das entfernen ConsumerApp-1
Kontingent verbrauchen, indem Sie den folgenden Befehl verwenden, aber Führen Sie den Befehl nicht aus da wir als nächstes die Quoten testen werden.
ConsumerApp-2-Kontingentkonfiguration
Ersetzen Sie Platzhalter in allen Befehlen in diesem Abschnitt durch Werte, die Ihrem Konto entsprechen.
Legen wir eine Verbrauchsquote von 1024 Bytes/Sekunde fest ConsumerApp-2
. For <ConsumerApp-2 Client Id>
und <ConsumerApp-2 Role Session>
Stellen Sie sicher, dass Sie dieselben Werte verwenden, die Sie beim Ausführen verwendet haben ConsumerApp-2
früher (consumerapp-2-client-id
und consumerapp-2-role-session
, beziehungsweise):
Überprüfen Sie die ConsumerApp-2
Verbrauchen Sie das Kontingent mit dem folgenden Befehl:
Wie bei ConsumerApp-1
, können Sie die entfernen ConsumerApp-2
Verbrauchen Sie das Kontingent mit demselben Befehl wie ConsumerApp-2
Kunden- und Benutzerdaten.
Führen Sie die Produzenten- und Verbraucheranwendungen erneut aus, nachdem Sie Kontingente festgelegt haben
Lassen Sie uns die Anwendungen erneut ausführen, um die Wirkung der Kontingente zu überprüfen.
Führen Sie ProducerApp-1 erneut aus
Wiederholung ProducerApp-1
in synchron Modus mit demselben Befehl, den Sie zuvor verwendet haben. Der folgende Screenshot veranschaulicht dies ProducerApp-1
erreicht seine Quote bei einem der Broker, der produce-throttle-time-avg
und produce-throttle-time-max client
Der Metrikwert liegt über 0.0. Ein Wert über 0.0 zeigt dies an ProducerApp-1
wird gedrosselt. Erlauben ProducerApp-1
einige Sekunden laufen lassen und dann mit stoppen Strg + C.
Sie können die Auswirkung der Produktionsquote auch durch eine erneute Ausführung testen ProducerApp-1
wieder in asynchron Modus (--producer-type async
). Ähnlich wie bei einem synchronen Lauf veranschaulicht der folgende Screenshot dies ProducerApp-1
erreicht seine Quote bei einem der Broker, der produce-throttle-time-avg
und produce-throttle-time-max
Der Client-Metrikwert liegt über 0.0. Ein Wert über 0.0 zeigt dies an ProducerApp-1
wird gedrosselt. Asynchron zulassen ProducerApp-1
eine Weile laufen.
Irgendwann werden Sie a sehen TimeoutException
Angabe org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Bei Verwendung eines asynchron Erzeuger und sendet Nachrichten mit einer höheren Rate, als der Broker aufgrund des Kontingents akzeptieren kann, werden die Nachrichten zuerst im Speicher der Clientanwendung in die Warteschlange gestellt. Wenn die Rate der gesendeten Nachrichten weiterhin die Rate der akzeptierten Nachrichten übersteigt, wird dem Client irgendwann der Pufferspeicher ausgehen, was zum nächsten Fehler führt Producer.send()
Anruf gesperrt werden. Producer.send()
wird irgendwann einen werfen TimeoutException
wenn die Zeitüberschreitungsverzögerung nicht ausreicht, um dem Broker zu ermöglichen, mit der Produzentenanwendung Schritt zu halten. Stoppen ProducerApp-1
durch die Nutzung Strg + C.
Führen Sie ConsumerApp-1 erneut aus
Wiederholung ConsumerApp-1
mit demselben Befehl, den Sie zuvor verwendet haben. Der folgende Screenshot veranschaulicht dies ConsumerApp-1
erreicht seine Quote, die fetch-throttle-time-avg
und fetch-throttle-time-max client
Der Metrikwert liegt über 0.0. Ein Wert über 0.0 zeigt dies an ConsumerApp-1
wird gedrosselt.
Erlauben ConsumerApp-1
einige Sekunden laufen lassen und dann mit stoppen Strg + C.
Führen Sie ConsumerApp-2 erneut aus
Wiederholung ConsumerApp-2
mit demselben Befehl, den Sie zuvor verwendet haben. Ebenso, wann ConsumerApp-2
erreicht seine Quote, die fetch-throttle-time-avg
und fetch-throttle-time-max client
Der Metrikwert liegt oben 0.0. Ein Wert darüber 0.0 zeigt, dass die ConsumerApp-2
wird gedrosselt. Erlauben ConsumerApp-2
einige Sekunden lang laufen lassen und dann durch Drücken von stoppen Strg + C.
Client-Kontingentmetriken in Amazon CloudWatch
In Teil 1haben wir erklärt, dass Client-Metriken Metriken sind, die von Clients bereitgestellt werden, die eine Verbindung zu Kafka-Clustern herstellen. Lassen Sie uns die Client-Metriken in CloudWatch untersuchen.
- Wählen Sie in der CloudWatch-Konsole aus Alle Metriken.
- Der Benutzerdefinierte Namespaces, wählen Sie den Namespace aus, den Sie beim Ausführen der Clientanwendungen angegeben haben.
- Wählen Sie den Dimensionsnamen und dann aus
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
undfetch-throttle-time-avg metrics
für alle Anwendungen.
Diese Metriken zeigen das Drosselungsverhalten für an ProducerApp-1
, ConsumerApp-1
und ConsumerApp-2
Anwendungen, die mit den Kontingentkonfigurationen im vorherigen Abschnitt getestet wurden. Die folgenden Screenshots zeigen die Drosselung von ProducerApp-1
, ConsumerApp-1
und ConsumerApp-2
basierend auf Netzwerkbandbreitenkontingenten. ProducerApp-1
, ConsumerApp-1
und ConsumerApp-2
Anwendungen geben ihre jeweiligen Client-Metriken an CloudWatch weiter. Sie finden die Quellcode auf GitHub als Referenz.
Sichere Client-ID und Rollensitzungsname
Wir haben besprochen, wie man Kafka-Kontingente mithilfe einer Anwendung konfiguriert Kunden ID und authentifiziert Benutzer Rektor. Wenn eine Clientanwendung eine IAM-Rolle übernimmt, um auf Kafka-Themen in einem MSK-Cluster mit aktivierter IAM-Authentifizierung zuzugreifen, wird sie authentifiziert Benutzer Der Prinzipal wird im folgenden Format dargestellt (weitere Informationen finden Sie unter IAM-Kennungen):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Es enthält die Name der Rollensitzung (in diesem Fall, producerapp-1-role-session
), die in der Clientanwendung verwendet wird, während sie über das AWS STS SDK eine IAM-Rolle übernimmt. Die Clientanwendung Quellcode steht Ihnen als Referenz zur Verfügung. Der Kunden ID ist eine logische Namenszeichenfolge (z. B. producerapp-1-client-id
), die vom Anwendungsteam im Anwendungscode konfiguriert wird. Daher kann eine Anwendung eine andere Anwendung imitieren, wenn sie die erhält Kunden ID und Name der Rollensitzung der anderen Anwendung und ob sie berechtigt ist, dieselbe IAM-Rolle zu übernehmen.
Wie im Architekturdiagramm gezeigt, ConsumerApp-1
und ConsumerApp-2
sind zwei separate Clientanwendungen mit ihren jeweiligen Kontingentzuteilungen. Da beide berechtigt sind, dieselbe IAM-Rolle zu übernehmen (Topic-B-Read-Role
) im Demokonto dürfen sie Nachrichten konsumieren Topic-B
. Daher unterscheiden MSK-Cluster-Broker sie anhand ihrer Client-IDs und Nutzer (die ihre jeweiligen enthalten Name der Rollensitzung Werte). Wenn ConsumerApp-2
irgendwie bekommt man das ConsumerApp-1
Name der Rollensitzung und Kunden ID, es kann sich ausgeben ConsumerApp-1
durch Angabe der ConsumerApp-1
Name der Rollensitzung und Kunden ID im Anwendungscode.
Angenommen ConsumerApp-1
verwendet consumerapp-1-client-id
und consumerapp-1-role-session
als Kunden ID und Name der Rollensitzung, beziehungsweise. Deshalb, ConsumerApp-1's
authentifiziert Benutzer Prinzipal wird wie folgt aussehen, wenn es davon ausgeht Topic-B-Read-Role
IAM-Rolle:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Ebenso ConsumerApp-2
verwendet consumerapp-2-client-id
und consumerapp-2-role-session
als Kunden ID und Name der Rollensitzung, beziehungsweise. Deshalb, ConsumerApp-2's
authentifiziert Benutzer Prinzipal wird wie folgt aussehen, wenn es davon ausgeht Topic-B-Read-Role
IAM-Rolle:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
erhält ConsumerApp-1's
Kunden ID und Name der Rollensitzung und sie in ihrem Anwendungscode angibt, werden MSK-Cluster-Broker sie als solche behandeln ConsumerApp-1
und sehen Sie es sich an Kunden ID as consumerapp-1-client-id
, und die authentifizierte Benutzer Auftraggeber wie folgt:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Dies erlaubt ConsumerApp-2
um Daten aus dem MSK-Cluster mit einer maximalen Rate von 5120 Bytes pro Sekunde zu verbrauchen, statt 1024 Bytes pro Sekunde gemäß der ursprünglichen Kontingentzuteilung. Folglich, ConsumerApp-1's
Der Durchsatz wird negativ beeinflusst, wenn ConsumerApp-2
läuft gleichzeitig.
Verbesserte Architektur
Sie können vorstellen AWS Secrets Manager und AWS-Schlüsselverwaltungsservice (AWS KMS) in der Architektur zur Sicherung von Anwendungen Client-IDs und Rollensitzungsnamen. Um eine stärkere Governance zu gewährleisten, müssen die Client-ID und der Rollensitzungsname der Anwendungen als verschlüsselte Geheimnisse im Secrets Manager gespeichert werden. Die IAM-Ressourcenrichtlinien, die mit verschlüsselten Geheimnissen und einem vom Kunden verwalteten KMS-Schlüssel (CMK) verknüpft sind, ermöglichen Anwendungen nur den Zugriff und die Entschlüsselung ihrer jeweiligen Client-ID und ihres Rollensitzungsnamens. Auf diese Weise können Anwendungen nicht auf die Client-ID und den Rollensitzungsnamen der jeweils anderen zugreifen und sich gegenseitig als einander ausgeben. Das folgende Bild zeigt die erweiterte Architektur.
Der aktualisierte Ablauf besteht aus den folgenden Phasen:
- P1 -
ProducerApp-1
ruft es abclient-id
undrole-session-name
Geheimnisse von Secrets Manager - P2 -
ProducerApp-1
konfiguriert das Geheimnisclient-id
asCLIENT_ID_CONFIG
im Anwendungscode und geht davon ausTopic-B-Write-Role
(über seineProducerApp-1-Role
IAM-Rolle) durch Weitergabe des Geheimnissesrole-session-name
zum AWS STS SDKassumeRole
Funktionsaufruf - P3 - Mit der
Topic-B-Write-Role
IAM-Rolle übernommen,ProducerApp-1
beginnt mit dem Senden von Nachrichten anTopic-B
- C1 -
ConsumerApp-1
undConsumerApp-2
ihre jeweiligen abrufenclient-id
undrole-session-name
Geheimnisse von Secrets Manager - C2 -
ConsumerApp-1
undConsumerApp-2
Konfigurieren Sie ihr jeweiliges Geheimnisclient-id
asCLIENT_ID_CONFIG
in ihrem Anwendungscode und nehmen anTopic-B-Write-Role
(viaConsumerApp-1-Role
undConsumerApp-2-Role
IAM-Rollen) durch Weitergabe ihres Geheimnissesrole-session-name
im AWS STS SDKassumeRole
Funktionsaufruf - C3 - Mit der
Topic-B-Read-Role
IAM-Rolle übernommen,ConsumerApp-1
undConsumerApp-2
Fangen Sie an, Nachrichten von zu konsumierenTopic-B
Weitere Informationen finden Sie in der Dokumentation AWS Secrets Manager und AWS-KMS um besser zu verstehen, wie sie in die Architektur passen.
Ressourcen bereinigen
Navigieren Sie zur CloudFormation-Konsole und löschen Sie die MSKStack
Stapel. Alle während dieses Beitrags erstellten Ressourcen werden gelöscht.
Zusammenfassung
In diesem Beitrag haben wir detaillierte Schritte zum Konfigurieren von Amazon MSK-Kontingenten behandelt und deren Wirkung anhand von Beispiel-Clientanwendungen demonstriert. Darüber hinaus haben wir besprochen, wie Sie mithilfe von Clientmetriken feststellen können, ob eine Clientanwendung gedrosselt ist. Wir haben auch auf ein potenzielles Problem mit Klartext-Client-IDs und Rollensitzungsnamen hingewiesen. Wir empfehlen die Implementierung von Kafka-Kontingenten mit Amazon MSK mithilfe von Secrets Manager und AWS KMS gemäß dem überarbeiteten Architekturdiagramm, um eine Zero-Trust-Architektur sicherzustellen.
Wenn Sie Feedback oder Fragen zu diesem Beitrag, einschließlich der überarbeiteten Architektur, haben, würden wir uns freuen, von Ihnen zu hören. Wir hoffen, dass Ihnen die Lektüre dieses Beitrags gefallen hat.
Über den Autor
Vikas Bajaj ist Senior Manager, Solutions Architects, Financial Services bei Amazon Web Services. Mit über zwei Jahrzehnten Erfahrung im Finanzdienstleistungsbereich und in der Arbeit mit digital-nativen Unternehmen berät er Kunden zu Produktdesign, Technologie-Roadmaps und Anwendungsarchitekturen.
- SEO-gestützte Content- und PR-Distribution. Holen Sie sich noch heute Verstärkung.
- EVM-Finanzen. Einheitliche Schnittstelle für dezentrale Finanzen. Hier zugreifen.
- Quantum Media Group. IR/PR verstärkt. Hier zugreifen.
- PlatoAiStream. Web3-Datenintelligenz. Wissen verstärkt. Hier zugreifen.
- Quelle: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :hast
- :Ist
- :nicht
- :Wo
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Fähig
- Über Uns
- oben
- Akzeptieren
- akzeptieren
- Zugang
- Konto
- anerkennen
- über
- hinzufügen
- Zusatz
- Zusätzliche
- zusätzlich
- Nach der
- aufs Neue
- Alle
- Zuteilung
- Zuweisungen
- erlauben
- erlaubt
- ebenfalls
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- und
- Ein anderer
- jedem
- Apache
- Apache Kafka
- erscheinen
- Anwendung
- Anwendungen
- ca.
- Architektur
- SIND
- AS
- damit verbundenen
- angenommen
- At
- authentifiziert
- Authentifizierung
- verfügbar
- AWS
- AWS CloudFormation
- Bandbreite
- basierend
- BE
- weil
- war
- Bevor
- Sein
- Besser
- verstopft
- Bootstrap
- beide
- Boden
- Box
- Makler
- Broker
- Browser
- puffern
- Geschäft
- Unternehmen
- aber
- by
- rufen Sie uns an!
- namens
- Aufruf
- CAN
- Häuser
- CAT
- Ringen
- verursacht
- CD
- Hauptgeschäftsstelle
- Übernehmen
- Änderungen
- aus der Ferne überprüfen
- Auswählen
- Klasse
- Auftraggeber
- Kunden
- Cluster
- Code
- gemeinsam
- abschließen
- Berechnen
- Konzepte
- Konfiguration
- konfiguriert
- Sich zusammenschliessen
- Folglich
- Konsul (Console)
- verbrauchen
- Verbraucher
- enthält
- fortsetzen
- weiter
- fortgesetzt
- Smartgeräte App
- bedeckt
- erstellen
- erstellt
- Erstellen
- Strom
- Kunde
- Kunden
- technische Daten
- Datenplattform
- Jahrzehnte
- Entschlüsseln
- Standard
- verzögern
- Demo
- Synergie
- Abhängig
- beschreiben
- beschrieben
- Design
- detailliert
- Details
- Bestimmen
- entschlossen
- Abmessungen
- diskutiert
- Display
- unterscheiden
- Dokumentation
- herunterladen
- zwei
- im
- jeder
- Früher
- Echo
- bewirken
- entweder
- ermöglichen
- freigegeben
- ermöglicht
- verschlüsselt
- Endpunkt
- erzwingen
- verbesserte
- gewährleisten
- Enter
- Arbeitsumfeld
- Fehler
- Äther (ETH)
- schließlich
- untersuchen
- Beispiel
- überschreiten
- Außer
- ERFAHRUNGEN
- erklärt
- Erklärung
- exportieren
- ausgesetzt
- Feedback
- wenige
- Abbildung
- Reichen Sie das
- Mappen
- Revolution
- Finanzdienstleistungen
- Finden Sie
- Vorname
- passen
- Fluss
- Folgende
- folgt
- Aussichten für
- Format
- vier
- für
- Funktion
- Außerdem
- bekommen
- Git
- GitHub
- Governance
- mehr
- Gruppe an
- Gruppen
- glücklich
- Haben
- he
- hören
- High-Level
- Besondere
- ein Geschenk
- Gastgeber
- Gastgeber
- Ultraschall
- Hilfe
- HTML
- http
- HTTPS
- IAM
- ID
- Identitätsschutz
- ids
- if
- zeigt
- Image
- wirkt
- Implementierung
- Umsetzung
- in
- Einschließlich
- zeigen
- zeigt
- Anzeige
- Krankengymnastik
- Information
- Instanz
- Integral
- in
- einführen
- eingeführt
- isn
- Problem
- IT
- SEINE
- Javac
- jpg
- kafka
- Wesentliche
- bekannt
- LIMIT
- Line
- Linien
- Liste
- logisch
- um
- verwaltet
- Management
- Manager
- maximal
- Kann..
- gemessen
- Memory
- Nachrichten
- Metrik
- Minuten
- Model
- ändern
- Überwachen
- mehr
- MS
- viel
- mehrere
- sollen
- Name
- Namen
- Navigieren
- Menü
- Need
- negativ
- Netzwerk
- Neu
- weiter
- nicht
- bekannt
- Notiz..
- Anzahl
- erhält
- vorkommend
- of
- on
- EINEM
- einzige
- öffnet
- betrieben
- Einkauf & Prozesse
- Option
- Optionen
- or
- Auftrag
- Original
- Andere
- übrig
- verpackt
- Seite
- Brot
- Parameter
- Parameter
- Teil
- Bestanden
- Bestehen
- Weg
- Prozentsatz
- ausführen
- Leistung
- Erlaubnis
- Klartext
- Plattform
- Plato
- Datenintelligenz von Plato
- PlatoData
- Points
- Punkte
- Politik durchzulesen
- Datenschutzrichtlinien
- Post
- Potenzial
- Drücken
- verhindern
- früher
- vorher
- Principal
- privat
- Verarbeitung
- produziert
- Hersteller
- Produkt
- Produkt-Design
- immobilien
- die
- vorausgesetzt
- Öffentlichkeit
- veröffentlichen
- Fragen
- Bewerten
- lieber
- Erreicht
- Lesen Sie mehr
- Lesebrillen
- empfehlen
- empfohlen
- bezeichnet
- Region
- merken
- entfernen
- ersetzen
- Quelle
- vertreten
- Anforderung
- Zugriffe
- falls angefordert
- Ressourcen
- Downloads
- diejenigen
- beziehungsweise
- REST
- Roadmaps
- Rollen
- Rollen
- Führen Sie
- Laufen
- s
- gleich
- zufrieden
- zufrieden
- Screenshots
- Sdk
- Zweite
- Sekunden
- Die Geheime
- Abschnitt
- Verbindung
- Sicherheitdienst
- Sicherheitstoken
- sehen
- senden
- Sendung
- Senior
- getrennte
- Modellreihe
- Lösungen
- Sitzung
- kompensieren
- Einstellung
- Einstellungen
- sollte
- gezeigt
- Konzerte
- ähnlich
- Ähnlich
- da
- Lösungen
- Quelle
- Quellcode
- Raumfahrt
- spezifisch
- angegeben
- Stapel
- Stufen
- Anfang
- begonnen
- Schritt
- Shritte
- Stoppen
- gelagert
- Streaming
- Schnur
- stärker
- Subnetze
- Folge
- Erfolgreich
- so
- ausreichend
- geliefert
- Unterstützt
- Nehmen
- Team
- Technologie
- Vorlage
- Vorlagen
- Terminal
- Test
- getestet
- Testen
- als
- zur Verbesserung der Gesundheitsgerechtigkeit
- Das
- Die Quelle
- ihr
- Sie
- dann
- deswegen
- vom Nutzer definierten
- fehlen uns die Worte.
- nach drei
- Durch
- Durchsatz
- Zeit
- zu
- Zeichen
- Thema
- Themen
- behandeln
- Vertrauen
- XNUMX
- tippe
- Typen
- Verständnis
- Aktualisierung
- aktualisiert
- Aktualisierung
- -
- benutzt
- Mitglied
- Nutzer
- verwendet
- Verwendung von
- Wert
- Werte
- überprüfen
- Anzeigen
- wurde
- Weg..
- we
- Netz
- Web-Services
- GUT
- wann
- ob
- welche
- während
- werden wir
- mit
- ohne
- arbeiten,
- schreiben
- noch
- U
- Ihr
- Zephyrnet