Les quotas Kafka font partie intégrante des clusters Kafka multilocataires. Ils empêchent les performances du cluster Kafka d'être affectées négativement par des applications mal comportées qui consomment trop de ressources de cluster. De plus, ils permettent à la plate-forme centrale de données de streaming d'être exploitée comme une plate-forme multi-tenant et utilisée par les applications en aval et en amont dans plusieurs secteurs d'activité. Kafka prend en charge deux types de quotas : quotas de bande passante réseau ainsi que demander des quotas de taux. Les quotas de bande passante réseau définissent des seuils de débit d'octets, tels que la quantité de données que les applications clientes peuvent produire et consommer à partir de chaque courtier individuel dans un cluster Kafka, mesurée en octets par seconde. Les quotas de taux de demande limitent le pourcentage de temps que chaque courtier individuel passe à traiter les demandes des applications client. Selon votre configuration, les quotas Kafka peuvent être définis pour des utilisateurs spécifiques, des ID client spécifiques ou les deux.
In Partie 1 de cette série en deux parties, nous avons discuté des concepts sur la façon d'appliquer les quotas de Kafka dans Amazon Managed Streaming pour Apache Kafka (Amazon MSK) clusters lors de l'utilisation Gestion des identités et des accès AWS (IAM) contrôle d'accès.
Dans cet article, nous vous expliquons étape par étape la mise en œuvre de la configuration des quotas Kafka dans un cluster MSK tout en utilisant le contrôle d'accès IAM et en les testant via des exemples d'applications clientes.
Vue d'ensemble de la solution
La figure suivante, que nous avons introduite pour la première fois dans Partie 1, illustre comment les applications clientes Kafka (ProducerApp-1
, ConsumerApp-1
et une ConsumerApp-2
) accès Topic-B
dans le cluster MSK en assumant les rôles IAM d'écriture et de lecture. Chaque application client producteur et consommateur a un quota qui détermine la quantité de données qu'elle peut produire ou consommer en octets/seconde. Le ProducerApp-1
quota lui permet de produire jusqu'à 1024 octets/seconde par courtier. De même, le ConsumerApp-1
ainsi que ConsumerApp-2
les quotas leur permettent de consommer respectivement 5120 et 1024 octets/seconde par courtier. Voici une brève explication du flux illustré dans le diagramme d'architecture :
- P1 -
ProducerApp-1
(via sonProducerApp-1-Role
rôle IAM) assume leTopic-B-Write-Role
Rôle IAM auquel envoyer des messagesTopic-B
- P2 - Avec le
Topic-B-Write-Role
Rôle IAM assumé,ProducerApp-1
commence à envoyer des messages àTopic-B
- C1 -
ConsumerApp-1
(via sonConsumerApp-1-Role
rôle IAM) etConsumerApp-2
(via sonConsumerApp-2-Role
rôle IAM) assument leTopic-B-Read-Role
Rôle IAM pour lire les messages à partir deTopic-B
- C2 - Avec le
Topic-B-Read-Role
Rôle IAM assumé,ConsumerApp-1
ainsi queConsumerApp-2
commencer à consommer des messages deTopic-B
Notez que ce message utilise le Interface de ligne de commande AWS (AWS CLI), AWS CloudFormation modèles, et les Console de gestion AWS pour le provisionnement et la modification des ressources AWS, et les ressources provisionnées seront facturées sur votre compte AWS.
Les étapes de haut niveau sont les suivantes :
- Provisionnez un cluster MSK avec le contrôle d'accès IAM et Cloud de calcul élastique Amazon (Amazon EC2) pour les applications clientes.
- Création
Topic-B
sur le cluster MSK. - Créer des rôles IAM auxquels les applications clientes pourront accéder
Topic-B
. - Exécutez les applications producteur et consommateur sans définir de quotas.
- Configurez les quotas de production et de consommation pour les applications clientes.
- Réexécutez les applications après avoir défini les quotas.
Pré-requis
Il est recommandé de lire Partie 1 de cette série avant de continuer. Pour commencer, vous avez besoin des éléments suivants :
- Un compte AWS qui sera appelé compte de démonstration dans cet article, en supposant que son ID de compte est
1111 1111 1111
- Autorisations pour créer, supprimer et modifier des ressources AWS dans le compte de démonstration
Provisionner un cluster MSK avec un contrôle d'accès IAM et des instances EC2
Cette étape implique le provisionnement d'un cluster MSK avec le contrôle d'accès IAM dans un VPC dans le compte de démonstration. De plus, nous créons quatre instances EC2 pour apporter des modifications de configuration au cluster MSK et aux applications clientes du producteur hôte et du consommateur.
Déployer la pile CloudFormation
- Cloner le GitHub référentiel pour télécharger les fichiers modèles CloudFormation et les exemples d'applications client :
- Sur la console AWS CloudFormation, choisissez Combos dans le volet de navigation.
- Selectionnez Créer une pile.
- Pour Préparer le modèle, sélectionnez Le modèle est prêt.
- Pour Source du modèle, sélectionnez Télécharger un fichier modèle.
- Télécharger le
cfn-msk-stack-1.yaml
fichier deamazon-msk-kafka-quotas/cfn-templates
répertoire, puis choisissez Suivant. - Pour Nom de la pile, Entrer
MSKStack
. - Laissez les paramètres par défaut et choisissez Suivant.
- Faites défiler vers le bas de la Configurer les options de pile page et choisissez Suivant continuer.
- Faites défiler vers le bas de la Avis page, cochez la case Je reconnais que CloudFormation peut créer des ressources IAMet choisissez Envoyer.
Il faudra environ 30 minutes pour que la pile soit complète. Une fois la pile créée avec succès, les ressources suivantes seront créées :
- Un VPC avec trois sous-réseaux privés et un sous-réseau public
- Un cluster MSK avec trois courtiers avec le contrôle d'accès IAM activé
- Une instance EC2 appelée
MSKAdminInstance
pour modifier les paramètres de cluster MSK ainsi que créer et modifier des ressources AWS - Instances EC2 pour
ProducerApp-1
,ConsumerApp-1
et uneConsumerApp-2
, un pour chaque application client - Un rôle IAM distinct pour chaque instance EC2 qui héberge l'application cliente, comme indiqué dans le diagramme d'architecture
- De la pile Sortie onglet, notez le
MSKClusterArn
valeur.
Créer un sujet sur le cluster MSK
Créer Topic-B
sur le cluster MSK, procédez comme suit :
- Sur la console Amazon EC2, accédez à votre liste d'instances EC2 en cours d'exécution.
- Sélectionnez le
MSKAdminInstance
instance EC2 et choisissez NOUS CONTACTER. - Sur le Session Manager onglet, choisissez NOUS CONTACTER.
- Exécutez les commandes suivantes dans le nouvel onglet qui s'ouvre dans votre navigateur :
- Définissez la variable d'environnement pour qu'elle pointe vers le point de terminaison IAM des courtiers du cluster MSK :
- Notez la valeur de
BOOTSTRAP_BROKERS_IAM
. - Exécutez la commande Kafka CLI suivante pour créer
Topic-B
sur le cluster MSK :
Étant donné que le cluster MSK est provisionné avec le contrôle d'accès IAM, l'option --command-config
souligne config_iam.properties
, qui contient les propriétés requises pour le contrôle d'accès IAM, créé par le MSKStack
Pile CloudFormation.
Les avertissements suivants peuvent apparaître lorsque vous exécutez les commandes CLI de Kafka, mais vous pouvez les ignorer :
- Pour vérifier que
Topic-B
a été créé, répertoriez tous les sujets :
Créer des rôles IAM pour que les applications clientes accèdent à Topic-B
Cette étape consiste à créer Topic-B-Write-Role
ainsi que Topic-B-Read-Role
comme indiqué dans le schéma d'architecture. Topic-B-Write-Role
permet les opérations d'écriture sur Topic-B
, et peut être supposé par le ProducerApp-1
. De manière similaire, le ConsumerApp-1
ainsi que ConsumerApp-2
peut assumer Topic-B-Read-Role
pour effectuer des opérations de lecture sur Topic-B
. Pour effectuer des opérations de lecture sur Topic-B
, ConsumerApp-1
ainsi que ConsumerApp-2
doivent également appartenir aux groupes de consommateurs spécifiés lors de la MSKStack
mise à jour de la pile à l'étape suivante.
Créez les rôles en procédant comme suit :
- Sur la console AWS CloudFormation, choisissez Combos dans le volet de navigation.
- Sélectionnez
MSKStack
et choisissez Mises à jour. - Pour Préparer le modèle, sélectionnez Remplacer le modèle actuel.
- Pour Source du modèle, sélectionnez Télécharger un fichier modèle.
- Télécharger le
cfn-msk-stack-2.yaml
fichier deamazon-msk-kafka-quotas/cfn-templates
répertoire, puis choisissez Suivant. - Fournissez les paramètres de pile supplémentaires suivants :
-
- Pour Sujet B ARN, entrer le
Topic-B
ARN.
- Pour Sujet B ARN, entrer le
L'ARN doit être formaté comme arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Utilisez le nom du cluster et l'UUID du cluster à partir de l'ARN du cluster MSK que vous avez noté précédemment et indiquez votre région AWS. Pour plus d'informations, reportez-vous au Contrôle d'accès IAM pour Amazon MSK.
-
- Pour Nom du groupe de consommateurs ConsumerApp-1, Entrer
ConsumerApp-1
groupe de consommateurs ARN.
- Pour Nom du groupe de consommateurs ConsumerApp-1, Entrer
Il doit être formaté comme arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Pour Nom du groupe de consommateurs ConsumerApp-2, Entrer
ConsumerApp-2
groupe de consommateurs ARN.
- Pour Nom du groupe de consommateurs ConsumerApp-2, Entrer
Utilisez un format similaire à celui de l'ARN précédent.
- Selectionnez Suivant continuer.
- Faites défiler vers le bas de la Configurer la pile page d'options et choisissez Suivant continuer.
- Faites défiler vers le bas de la Avis page, cochez la case Je reconnais que CloudFormation peut créer des ressources IAMet choisissez Mettre à jour la pile.
La mise à jour de la pile prendra environ 3 minutes. Une fois la pile mise à jour avec succès, les ressources suivantes seront créées :
- Sujet-B-Write-Rôle – Un rôle IAM avec l'autorisation d'effectuer des opérations d'écriture sur
Topic-B
. Sa politique de confiance permet auProducerApp-1-Role
rôle IAM pour l'assumer. - Sujet-B-Lire-Rôle – Un rôle IAM avec l'autorisation d'effectuer des opérations de lecture sur
Topic-B
. Sa politique de confiance permet auConsumerApp-1-Role
ainsi queConsumerApp-2-Role
rôles IAM pour l'assumer. En outre,ConsumerApp-1
ainsi queConsumerApp-2
doit également appartenir aux groupes de consommateurs que vous avez spécifiés lors de la mise à jour de la pile pour effectuer des opérations de lecture surTopic-B
.
- De la pile Sortie onglet, notez le
TopicBReadRoleARN
ainsi queTopicBWriteRoleARN
valeurs.
Exécutez les applications producteur et consommateur sans définir de quotas
Ici, on court ProducerApp-1
, ConsumerApp-1
et une ConsumerApp-2
sans fixer leurs quotas. À partir des étapes précédentes, vous aurez besoin BOOTSTRAP_BROKERS_IAM
valeur, Topic-B-Write-Role
ARN, et Topic-B-Read-Role
ARN. Le code source des applications clientes et leurs versions packagées sont disponibles dans le GitHub référentiel.
Exécutez l'application ConsumerApp-1
Pour exécuter le ConsumerApp-1
demande, suivez les étapes suivantes :
- Sur la console Amazon EC2, sélectionnez le
ConsumerApp-1
instance EC2 et choisissez NOUS CONTACTER. - Sur le Session Manager onglet, choisissez NOUS CONTACTER.
- Exécutez les commandes suivantes dans le nouvel onglet qui s'ouvre dans votre navigateur :
- Exécutez le
ConsumerApp-1
application pour commencer à consommer des messages deTopic-B
:
Vous pouvez trouver code source sur GitHub pour votre référence. Les détails du paramètre de ligne de commande sont les suivants :
- –serveurs d'amorçage – Point de terminaison IAM des courtiers d'amorçage du cluster MSK.
- –assumer-le-rôle-arn -
Topic-B-Read-Role
ARN du rôle IAM. En assumant ce rôle,ConsumerApp-1
lira les messages du sujet. - -région – Région que vous utilisez.
- -Nom du sujet – Nom du sujet à partir duquel
ConsumerApp-1
lira les messages. La valeur par défaut estTopic-B
. - –groupe de consommateurs – Nom du groupe de consommateurs pour
ConsumerApp-1
, comme spécifié lors de la mise à jour de la pile. - –role-nom-session -
ConsumerApp-1
assume leTopic-B-Read-Role
utilisant l' Service de jeton de sécurité AWS (AWS STS) SDK.ConsumerApp-1
utilisera ce nom de session de rôle lors de l'appel duassumeRole
la fonction. - -identité du client – Identifiant client pour
ConsumerApp-1
. - –métriques-de-quota-de-consommateur d'impression – Drapeau indiquant si les métriques client doivent être imprimées sur le terminal par
ConsumerApp-1
. - –cw-nom-dimension - Amazon Cloud Watch nom de la dimension qui sera utilisé pour publier les métriques de limitation du client à partir de
ConsumerApp-1
. - –valeur-dimension-cw – Valeur de dimension CloudWatch qui sera utilisée pour publier les métriques de limitation du client à partir de
ConsumerApp-1
. - –cw-espace de noms – Espace de noms où
ConsumerApp-1
publiera des métriques CloudWatch afin de surveiller la limitation.
- Si vous êtes satisfait du reste des paramètres, utilisez la commande suivante et modifiez
--assume-role-arn
ainsi que--region
selon votre environnement :
La fetch-throttle-time-avg
ainsi que fetch-throttle-time-max
les mesures du client doivent afficher 0.0, indiquant qu'aucune limitation n'est en cours pour ConsumerApp-1
. N'oubliez pas que nous n'avons pas défini de quota de consommation pour ConsumerApp-1
encore. Laissez-le fonctionner pendant un certain temps.
Exécutez l'application ConsumerApp-2
Pour exécuter le ConsumerApp-2
demande, suivez les étapes suivantes :
- Sur la console Amazon EC2, sélectionnez le
ConsumerApp-2
instance EC2 et choisissez NOUS CONTACTER. - Sur le Session Manager onglet, choisissez NOUS CONTACTER.
- Exécutez les commandes suivantes dans le nouvel onglet qui s'ouvre dans votre navigateur :
- Exécutez le
ConsumerApp-2
application pour commencer à consommer des messages deTopic-B
:
Le code a des détails de paramètres de ligne de commande similaires à ConsumerApp-1
discuté précédemment, à l'exception de ce qui suit :
- –groupe de consommateurs – Nom du groupe de consommateurs pour
ConsumerApp-2
, comme spécifié lors de la mise à jour de la pile. - –role-nom-session -
ConsumerApp-2
assume leTopic-B-Read-Role
à l'aide du kit SDK AWS STS.ConsumerApp-2
utilisera ce nom de session de rôle lors de l'appel duassumeRole
la fonction. - -identité du client – Identifiant client pour
ConsumerApp-2
.
- Si vous êtes satisfait du reste des paramètres, utilisez la commande suivante et modifiez
--assume-role-arn
ainsi que--region
selon votre environnement :
La fetch-throttle-time-avg
ainsi que fetch-throttle-time-max
les mesures du client doivent afficher 0.0, indiquant qu'aucune limitation n'est en cours pour ConsumerApp-2
. N'oubliez pas que nous n'avons pas défini de quota de consommation pour ConsumerApp-2
encore. Laissez-le fonctionner pendant un certain temps.
Exécutez l'application ProducerApp-1
Pour exécuter le ProducerApp-1
demande, suivez les étapes suivantes :
- Sur la console Amazon EC2, sélectionnez le
ProducerApp-1
instance EC2 et choisissez NOUS CONTACTER. - Sur le Session Manager onglet, choisissez NOUS CONTACTER.
- Exécutez les commandes suivantes dans le nouvel onglet qui s'ouvre dans votre navigateur :
- Exécutez le
ProducerApp-1
application pour commencer à envoyer des messages àTopic-B
:
Vous pouvez trouver code source sur GitHub pour votre référence. Les détails du paramètre de ligne de commande sont les suivants :
- –serveurs d'amorçage – Point de terminaison IAM des courtiers d'amorçage du cluster MSK.
- –assumer-le-rôle-arn -
Topic-B-Write-Role
ARN du rôle IAM. En assumant ce rôle,ProducerApp-1
écrira des messages sur le sujet. - -Nom du sujet -
ProducerApp-1
enverra des messages à ce sujet. La valeur par défaut estTopic-B
. - -région – Région AWS que vous utilisez.
- –num-messages – Nombre de messages que le
ProducerApp-1
l'application enverra au sujet. - –role-nom-session -
ProducerApp-1
assume leTopic-B-Write-Role
à l'aide du kit SDK AWS STS.ProducerApp-1
utilisera ce nom de session de rôle lors de l'appel duassumeRole
la fonction. - -identité du client – Identifiant client de
ProducerApp-1
. - –type de producteur -
ProducerApp-1
peut être exécuté soit de manière synchrone or de manière asynchrone. Les options sont synchroniser or async. - –indicateurs-de-quota-de-producteur-d'impression – Drapeau indiquant si les métriques client doivent être imprimées sur le terminal par ProducteurApp-1.
- –cw-nom-dimension – Nom de la dimension CloudWatch qui sera utilisé pour publier les métriques de limitation du client à partir de ProducteurApp-1.
- –valeur-dimension-cw – Valeur de dimension CloudWatch qui sera utilisée pour publier les métriques de limitation du client à partir de ProducteurApp-1.
- –cw-espace de noms – L'espace de noms où ProducteurApp-1 publiera des métriques CloudWatch afin de surveiller la limitation.
- Si vous êtes satisfait du reste des paramètres, utilisez la commande suivante et modifiez
--assume-role-arn
ainsi que--region
selon votre environnement. Pour exécuter un producteur Kafka synchrone, il utilise l'option--producer-type sync
:
Sinon, utilisez --producer-type async
pour exécuter un producteur asynchrone. Pour plus de détails, reportez-vous à Envoi asynchrone.
La produce-throttle-time-avg
ainsi que produce-throttle-time-max
les mesures du client doivent afficher 0.0, indiquant qu'aucune limitation n'est en cours pour ProducerApp-1
. N'oubliez pas que nous n'avons pas fixé de quota de production pour ProducerApp-1
encore. Regarde ça ConsumerApp-1
ainsi que ConsumerApp-2
peut consommer des messages et remarquer qu'ils ne sont pas limités. Arrêtez les applications client consommateur et producteur en appuyant sur Ctrl + C dans leurs onglets de navigateur respectifs.
Définir des quotas de production et de consommation pour les applications clientes
Maintenant que nous avons exécuté les applications producteur et consommateur sans quotas, nous définissons leurs quotas et les réexécutons.
Ouvrez le Gestionnaire de séances borne pour le MSKAdminInstance
EC2 comme décrit précédemment et exécutez les commandes suivantes pour trouver la configuration par défaut de l'un des courtiers du cluster MSK. Les clusters MSK sont provisionnés avec la configuration des quotas Kafka par défaut.
La capture d'écran suivante montre le Broker-1
valeurs par défaut pour quota.consumer.default
ainsi que quota.producer.default
.
Configuration des quotas ProducerApp-1
Remplacez les espaces réservés dans toutes les commandes de cette section par des valeurs correspondant à votre compte.
Selon le diagramme d'architecture décrit précédemment, définissez le ProducerApp-1
quota de production à 1024 octets/seconde. Pour <ProducerApp-1 Client Id>
ainsi que <ProducerApp-1 Role Session>
, assurez-vous d'utiliser les mêmes valeurs que celles que vous avez utilisées lors de l'exécution ProducerApp-1
plus tôt (producerapp-1-client-id
ainsi que producerapp-1-role-session
, respectivement):
Vérifiez le ProducerApp-1
produire un quota à l'aide de la commande suivante :
Vous pouvez supprimer le ProducerApp-1
produire un quota en utilisant la commande suivante, mais ne lancez pas la commande car nous testerons ensuite les quotas.
Configuration des quotas ConsumerApp-1
Remplacez les espaces réservés dans toutes les commandes de cette section par des valeurs correspondant à votre compte.
Fixons un quota de consommation de 5120 octets/seconde pour ConsumerApp-1
. For
<ConsumerApp-1 Client Id>
ainsi que <ConsumerApp-1 Role Session>
, assurez-vous d'utiliser les mêmes valeurs que celles que vous avez utilisées lors de l'exécution ConsumerApp-1
plus tôt (consumerapp-1-client-id
ainsi que consumerapp-1-role-session
, respectivement):
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>
Vérifiez le ConsumerApp-1
consommez le quota à l'aide de la commande suivante :
Vous pouvez supprimer le ConsumerApp-1
consommer quota, en utilisant la commande suivante, mais ne lancez pas la commande car nous testerons ensuite les quotas.
Configuration des quotas ConsumerApp-2
Remplacez les espaces réservés dans toutes les commandes de cette section par des valeurs correspondant à votre compte.
Fixons un quota de consommation de 1024 octets/seconde pour ConsumerApp-2
. For
<ConsumerApp-2 Client Id>
ainsi que <ConsumerApp-2 Role Session>
, assurez-vous d'utiliser les mêmes valeurs que celles que vous avez utilisées lors de l'exécution ConsumerApp-2
plus tôt (consumerapp-2-client-id
ainsi que consumerapp-2-role-session
, respectivement):
Vérifiez le ConsumerApp-2
consommez le quota à l'aide de la commande suivante :
Comme avec ConsumerApp-1
, vous pouvez supprimer le ConsumerApp-2
consommer le quota en utilisant la même commande avec ConsumerApp-2
détails du client et de l'utilisateur.
Réexécutez les applications producteur et consommateur après avoir défini des quotas
Exécutons à nouveau les applications pour vérifier l'effet des quotas.
Réexécutez ProducerApp-1
Rediffusion ProducerApp-1
in synchrone mode avec la même commande que vous avez utilisée précédemment. La capture d'écran suivante illustre que lorsque ProducerApp-1
atteint son quota sur l'un des courtiers, le produce-throttle-time-avg
ainsi que produce-throttle-time-max client
la valeur de la métrique sera supérieure à 0.0. Une valeur supérieure à 0.0 indique que ProducerApp-1
est étranglé. Permettre ProducerApp-1
fonctionner pendant quelques secondes, puis l'arrêter en utilisant Ctrl + C.
Vous pouvez également tester l'effet du quota de produits en réexécutant ProducerApp-1
à nouveau dans asynchrone modes (--producer-type async
). Semblable à une exécution synchrone, la capture d'écran suivante illustre que lorsque ProducerApp-1
atteint son quota sur l'un des courtiers, le produce-throttle-time-avg
ainsi que produce-throttle-time-max
la valeur des métriques du client sera supérieure à 0.0. Une valeur supérieure à 0.0 indique que ProducerApp-1
est étranglé. Autoriser asynchrone ProducerApp-1
courir un moment.
Vous finirez par voir un TimeoutException
indiquant org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Lors de l'utilisation d'un asynchrone producteur et envoyant des messages à un débit supérieur à ce que le courtier peut accepter en raison du quota, les messages seront d'abord mis en file d'attente dans la mémoire de l'application cliente. Le client finira par manquer d'espace tampon si le taux d'envoi de messages continue à dépasser le taux d'acceptation des messages, provoquant le prochain Producer.send()
appel à bloquer. Producer.send()
finira par jeter un TimeoutException
si le délai d'expiration n'est pas suffisant pour permettre au courtier de rattraper l'application du producteur. Arrêt ProducerApp-1
en utilisant Ctrl + C.
Réexécutez ConsumerApp-1
Rediffusion ConsumerApp-1
avec la même commande que vous avez utilisée précédemment. La capture d'écran suivante illustre que lorsque ConsumerApp-1
atteint son quota, le fetch-throttle-time-avg
ainsi que fetch-throttle-time-max client
la valeur de la métrique sera supérieure à 0.0. Une valeur supérieure à 0.0 indique que ConsumerApp-1
est étranglé.
Autoriser ConsumerApp-1
fonctionner pendant quelques secondes, puis l'arrêter en utilisant Ctrl + C.
Réexécutez ConsumerApp-2
Rediffusion ConsumerApp-2
avec la même commande que vous avez utilisée précédemment. De même, lorsque ConsumerApp-2
atteint son quota, le fetch-throttle-time-avg
ainsi que fetch-throttle-time-max client
la valeur de la métrique sera supérieure 0.0. Une valeur supérieure 0.0 indique que ConsumerApp-2
est étranglé. Permettre ConsumerApp-2
tourner pendant quelques secondes puis l'arrêter en appuyant sur Ctrl + C.
Métriques de quota client dans Amazon CloudWatch
In Partie 1, nous avons expliqué que les métriques client sont des métriques exposées par les clients se connectant aux clusters Kafka. Examinons les métriques client dans CloudWatch.
- Sur la console CloudWatch, choisissez Toutes les métriques.
- Sous Espaces de noms personnalisés, choisissez l'espace de noms que vous avez fourni lors de l'exécution des applications clientes.
- Choisissez le nom de la dimension et sélectionnez
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
et unefetch-throttle-time-avg metrics
pour toutes les candidatures.
Ces métriques indiquent un comportement de limitation pour ProducerApp-1
, ConsumerApp-1
et une ConsumerApp-2
applications testées avec les configurations de quotas de la section précédente. Les captures d'écran suivantes indiquent la limitation de ProducerApp-1
, ConsumerApp-1
et une ConsumerApp-2
en fonction des quotas de bande passante du réseau. ProducerApp-1
, ConsumerApp-1
et une ConsumerApp-2
les applications transmettent leurs métriques client respectives à CloudWatch. Vous pouvez trouver le code source sur GitHub pour votre référence.
ID client sécurisé et nom de session de rôle
Nous avons discuté de la façon de configurer les quotas Kafka à l'aide d'une application identité du client et authentifié utilisateur principal. Lorsqu'une application cliente assume un rôle IAM pour accéder aux sujets Kafka sur un cluster MSK avec l'authentification IAM activée, son authentifié utilisateur principal est représenté dans le format suivant (pour plus d'informations, reportez-vous à Identifiants IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Il contient le nom de session de rôle (dans ce cas, producerapp-1-role-session
) utilisé dans l'application cliente tout en assumant un rôle IAM via le kit SDK AWS STS. L'application cliente code source est disponible pour votre référence. Le identité du client est une chaîne de nom logique (par exemple, producerapp-1-client-id
) qui est configuré dans le code de l'application par l'équipe de l'application. Par conséquent, une application peut usurper l'identité d'une autre application si elle obtient le identité du client ainsi que nom de session de rôle de l'autre application et si elle est autorisée à assumer le même rôle IAM.
Comme le montre le schéma d'architecture, ConsumerApp-1
ainsi que ConsumerApp-2
sont deux applications client distinctes avec leurs quotas respectifs. Étant donné que les deux sont autorisés à assumer le même rôle IAM (Topic-B-Read-Role
) dans le compte de démonstration, ils sont autorisés à consommer des messages de Topic-B
. Ainsi, les courtiers du cluster MSK les distinguent en fonction de leur identifiants clients ainsi que utilisateurs (qui contiennent leurs nom de session de rôle valeurs). Si ConsumerApp-2
obtient en quelque sorte le ConsumerApp-1
nom de session de rôle ainsi que identité du client, il peut se faire passer pour ConsumerApp-1
en précisant le ConsumerApp-1
nom de session de rôle ainsi que identité du client dans le code de l'application.
Assumons ConsumerApp-1
Usages consumerapp-1-client-id
ainsi que consumerapp-1-role-session
comme identité du client ainsi que nom de session de rôle, respectivement. Par conséquent, ConsumerApp-1's
authentifié utilisateur principal apparaîtra comme suit lorsqu'il assume le Topic-B-Read-Role
Rôle IAM :
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
De même, le ConsumerApp-2
Usages consumerapp-2-client-id
ainsi que consumerapp-2-role-session
comme identité du client ainsi que nom de session de rôle, respectivement. Par conséquent, ConsumerApp-2's
authentifié utilisateur principal apparaîtra comme suit lorsqu'il assume le Topic-B-Read-Role
Rôle IAM :
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
obtient ConsumerApp-1's
identité du client ainsi que nom de session de rôle et les spécifie dans son code d'application, les courtiers du cluster MSK le traiteront comme ConsumerApp-1
et visualiser son identité du client as consumerapp-1-client-id
, et l'authentifié utilisateur principal comme suit :
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Ceci permet ConsumerApp-2
pour consommer les données du cluster MSK à un taux maximum de 5120 octets par seconde au lieu de 1024 octets par seconde conformément à son allocation de quota d'origine. Par conséquent, ConsumerApp-1's
le débit sera impacté négativement si ConsumerApp-2
s'exécute simultanément.
Architecture améliorée
Vous pouvez introduire AWS Secrets Manager ainsi que Service de gestion des clés AWS (AWS KMS) dans l'architecture pour sécuriser les applications' identifiants clients ainsi que noms de session de rôle. Pour renforcer la gouvernance, l'ID client et le nom de la session de rôle des applications doivent être stockés sous forme de secrets chiffrés dans Secrets Manager. Les stratégies de ressources IAM associées aux secrets chiffrés et à une clé gérée par le client (CMK) KMS permettront aux applications d'accéder et de déchiffrer uniquement leur ID client et leur nom de session de rôle respectifs. De cette façon, les applications ne pourront pas accéder à l'ID client et au nom de session de rôle de l'autre et se faire passer pour l'autre. L'image suivante montre l'architecture améliorée.
Le flux mis à jour comporte les étapes suivantes :
- P1 -
ProducerApp-1
récupère sonclient-id
ainsi querole-session-name
secrets du gestionnaire de secrets - P2 -
ProducerApp-1
configure le secretclient-id
asCLIENT_ID_CONFIG
dans le code de l'application, et supposeTopic-B-Write-Role
(via sonProducerApp-1-Role
rôle IAM) en transmettant le secretrole-session-name
au SDK AWS STSassumeRole
appel de fonction - P3 - Avec le
Topic-B-Write-Role
Rôle IAM assumé,ProducerApp-1
commence à envoyer des messages àTopic-B
- C1 -
ConsumerApp-1
ainsi queConsumerApp-2
récupérer leursclient-id
ainsi querole-session-name
secrets du gestionnaire de secrets - C2 -
ConsumerApp-1
ainsi queConsumerApp-2
configurer leur secret respectifclient-id
asCLIENT_ID_CONFIG
dans leur code d'application, et supposonsTopic-B-Write-Role
(ViaConsumerApp-1-Role
ainsi queConsumerApp-2-Role
rôles IAM, respectivement) en transmettant leur secretrole-session-name
dans le kit SDK AWS STSassumeRole
appel de fonction - C3 - Avec le
Topic-B-Read-Role
Rôle IAM assumé,ConsumerApp-1
ainsi queConsumerApp-2
commencer à consommer des messages deTopic-B
Reportez-vous à la documentation pour AWS Secrets Manager ainsi que AWSKMS pour mieux comprendre comment ils s'intègrent dans l'architecture.
Nettoyer les ressources
Accédez à la console CloudFormation et supprimez le MSKStack
empiler. Toutes les ressources créées lors de cette publication seront supprimées.
Conclusion
Dans cet article, nous avons couvert les étapes détaillées pour configurer les quotas Amazon MSK et démontré leur effet à travers des exemples d'applications clientes. En outre, nous avons expliqué comment vous pouvez utiliser les métriques client pour déterminer si une application client est limitée. Nous avons également mis en évidence un problème potentiel avec les ID client en clair et les noms de session de rôle. Nous vous recommandons d'implémenter des quotas Kafka avec Amazon MSK à l'aide de Secrets Manager et d'AWS KMS conformément au schéma d'architecture révisé pour garantir une architecture de confiance zéro.
Si vous avez des commentaires ou des questions sur ce message, y compris l'architecture révisée, nous serions heureux de vous entendre. Nous espérons que vous avez apprécié la lecture de cet article.
À propos de l’auteur
Vikas Bajaj est Senior Manager, Solutions Architects, Financial Services chez Amazon Web Services. Avec plus de deux décennies d'expérience dans les services financiers et de travail avec des entreprises natives du numérique, il conseille les clients sur la conception de produits, les feuilles de route technologiques et les architectures d'applications.
- Contenu propulsé par le référencement et distribution de relations publiques. Soyez amplifié aujourd'hui.
- Financement EVM. Interface unifiée pour la finance décentralisée. Accéder ici.
- Groupe de médias quantiques. IR/PR amplifié. Accéder ici.
- PlatoAiStream. Intelligence des données Web3. Connaissance Amplifiée. Accéder ici.
- La source: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :possède
- :est
- :ne pas
- :où
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Capable
- A Propos
- au dessus de
- Accepter
- acceptant
- accès
- Compte
- reconnaître
- à travers
- ajouter
- ajout
- Supplémentaire
- En outre
- Après
- encore
- Tous
- allocation
- allocations
- permettre
- permet
- aussi
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- ainsi que
- Une autre
- tous
- Apache
- Apache Kafka
- apparaître
- Application
- applications
- d'environ
- architecture
- SONT
- AS
- associé
- assumé
- At
- authentifié
- Authentification
- disponibles
- AWS
- AWS CloudFormation
- Bande passante
- basé
- BE
- car
- était
- before
- va
- Améliorée
- bloqué
- Bootstrap
- tous les deux
- Bas et Leggings
- Box
- courtier
- courtiers
- navigateur
- tampon
- la performance des entreprises
- entreprises
- mais
- by
- Appelez-nous
- appelé
- appel
- CAN
- maisons
- CHAT
- Attraper
- causer
- CD
- central
- Change
- Modifications
- vérifier
- Selectionnez
- classe
- client
- CLIENTS
- Grappe
- code
- Commun
- complet
- calcul
- concepts
- configuration
- configurée
- Connecter les
- par conséquent
- Console
- consommer
- consommateur
- contient
- continuer
- continue
- continue
- des bactéries
- couvert
- engendrent
- créée
- La création
- Courant
- des clients
- Clients
- données
- Plateforme de données
- décennies
- Décrypter
- Réglage par défaut
- retarder
- Démo
- démontré
- Selon
- décrire
- décrit
- Conception
- détaillé
- détails
- Déterminer
- détermine
- Dimension
- discuté
- Commande
- distinguer
- Documentation
- download
- deux
- pendant
- chacun
- Plus tôt
- echo
- effet
- non plus
- permettre
- activé
- permet
- crypté
- Endpoint
- imposer
- améliorée
- assurer
- Entrer
- Environment
- Erreurs
- Ether (ETH)
- faire une éventuelle
- examiner
- exemple
- dépassent
- Sauf
- d'experience
- expliqué
- explication
- Exporter
- exposé
- Réactions
- few
- Figure
- Déposez votre dernière attestation
- Fichiers
- la traduction de documents financiers
- services financiers
- Trouvez
- Prénom
- s'adapter
- flux
- Abonnement
- suit
- Pour
- le format
- quatre
- De
- fonction
- En outre
- obtenez
- Git
- GitHub
- gouvernance
- plus grand
- Réservation de groupe
- Groupes
- heureux vous
- Vous avez
- he
- entendre
- de haut niveau
- Surbrillance
- d'espérance
- hôte
- hôtes
- Comment
- How To
- HTML
- http
- HTTPS
- IAM
- ID
- Identite
- ids
- if
- illustre
- image
- impact
- la mise en oeuvre
- la mise en œuvre
- in
- Y compris
- indiquer
- indique
- indiquant
- individuel
- d'information
- instance
- intégrale
- développement
- introduire
- introduit
- ISN
- aide
- IT
- SES
- Java
- jpg
- kafka
- ACTIVITES
- connu
- LIMIT
- Gamme
- lignes
- Liste
- logique
- a prendre une
- gérés
- gestion
- manager
- maximales
- Mai..
- mesuré
- Mémoire
- messages
- Métrique
- minutes
- Mode
- modifier
- Surveiller
- PLUS
- MS
- beaucoup
- plusieurs
- must
- prénom
- noms
- NAVIGUER
- Navigation
- Besoin
- négativement
- réseau et
- Nouveauté
- next
- aucune
- noté
- Remarquer..
- nombre
- obtient
- se produire
- of
- on
- ONE
- uniquement
- ouvre
- réalisés
- Opérations
- Option
- Options
- or
- de commander
- original
- Autre
- ande
- plus de
- emballé
- page
- pain
- paramètre
- paramètres
- partie
- passé
- En passant
- chemin
- pourcentage
- effectuer
- performant
- autorisation
- Plaintext
- plateforme
- Platon
- Intelligence des données Platon
- PlatonDonnées
- Point
- des notes bonus
- politiques
- politique
- Post
- défaillances
- pressant
- empêcher
- précédent
- précédemment
- Directeur
- Privé
- traitement
- produire
- producteur
- Produit
- la conception des produits
- propriétés
- fournir
- à condition de
- public
- publier
- fréquemment posées
- Tarif
- plutôt
- atteint
- Lire
- en cours
- recommander
- recommandé
- visée
- région
- rappeler
- supprimez
- remplacer
- dépôt
- représenté
- nécessaire
- demandes
- conditions
- ressource
- Resources
- ceux
- respectivement
- REST
- feuilles de route
- Rôle
- rôle
- Courir
- pour le running
- s
- même
- satisfait
- satisfait avec
- screenshots
- Sdk
- Deuxièmement
- secondes
- secret
- Section
- sécurisé
- sécurité
- jeton de sécurité
- sur le lien
- envoyer
- envoi
- supérieur
- séparé
- Série
- Services
- Session
- set
- mise
- Paramétres
- devrait
- montré
- Spectacles
- similaires
- De même
- depuis
- Solutions
- Identifier
- code source
- Space
- groupe de neurones
- spécifié
- empiler
- étapes
- Commencer
- j'ai commencé
- étapes
- Étapes
- Arrêter
- stockée
- streaming
- Chaîne
- plus efficacement
- sous-réseaux
- ultérieur
- Avec succès
- tel
- suffisant
- fourni
- Les soutiens
- Prenez
- équipe
- Technologie
- modèle
- modèles
- terminal
- tester
- examiné
- Essais
- que
- qui
- La
- La Source
- leur
- Les
- puis
- donc
- l'ont
- this
- trois
- Avec
- débit
- fiable
- à
- jeton
- sujet
- Les sujets
- traiter
- La confiance
- deux
- type
- types
- compréhension
- Mises à jour
- a actualisé
- la mise à jour
- utilisé
- d'utiliser
- Utilisateur
- utilisateurs
- Usages
- en utilisant
- Plus-value
- Valeurs
- vérifier
- via
- Voir
- était
- Façon..
- we
- web
- services Web
- WELL
- quand
- que
- qui
- tout en
- sera
- comprenant
- sans
- de travail
- écrire
- encore
- you
- Votre
- zéphyrnet