Las cuotas de Kafka son parte integral de los clústeres de Kafka de múltiples inquilinos. Evitan que el rendimiento del clúster de Kafka se vea afectado negativamente por aplicaciones que se comportan mal y consumen en exceso los recursos del clúster. Además, permiten que la plataforma central de transmisión de datos funcione como una plataforma multiinquilino y que las aplicaciones aguas arriba y aguas abajo la utilicen en múltiples líneas de negocio. Kafka admite dos tipos de cuotas: cuotas de ancho de banda de red y cuotas de tasa de solicitud. Las cuotas de ancho de banda de la red definen umbrales de tasa de bytes, como la cantidad de datos que las aplicaciones cliente pueden producir y consumir de cada agente individual en un clúster de Kafka medido en bytes por segundo. Las cuotas de tasa de solicitudes limitan el porcentaje de tiempo que cada corredor individual dedica a procesar solicitudes de aplicaciones de clientes. Según su configuración, las cuotas de Kafka se pueden establecer para usuarios específicos, ID de cliente específicos o ambos.
In Parte 1 de esta serie de dos partes, discutimos los conceptos de cómo hacer cumplir las cuotas de Kafka en Streaming administrado por Amazon para Apache Kafka (Amazon MSK) clústeres durante el uso Gestión de identidades y accesos de AWS (IAM) control de acceso.
En esta publicación, lo guiaremos a través de la implementación paso a paso de la configuración de cuotas de Kafka en un clúster de MSK mientras usa el control de acceso de IAM y las prueba a través de aplicaciones cliente de muestra.
Resumen de la solución
La siguiente figura, que presentamos por primera vez en Parte 1, ilustra cómo las aplicaciones cliente de Kafka (ProducerApp-1
, ConsumerApp-1
y ConsumerApp-2
) acceso Topic-B
en el clúster de MSK asumiendo funciones de escritura y lectura de IAM. Cada aplicación cliente productora y consumidora tiene una cuota que determina la cantidad de datos que pueden producir o consumir en bytes/segundo. El ProducerApp-1
La cuota le permite producir hasta 1024 bytes/segundo por corredor. Del mismo modo, el ConsumerApp-1
y ConsumerApp-2
las cuotas les permiten consumir 5120 y 1024 bytes/segundo por corredor, respectivamente. La siguiente es una breve explicación del flujo que se muestra en el diagrama de arquitectura:
- P1 –
ProducerApp-1
(a través de suProducerApp-1-Role
rol de IAM) asume elTopic-B-Write-Role
Rol de IAM para enviar mensajesTopic-B
- P2 - Con el
Topic-B-Write-Role
rol de IAM asumido,ProducerApp-1
comienza a enviar mensajes aTopic-B
- C1 –
ConsumerApp-1
(a través de suConsumerApp-1-Role
rol de IAM) yConsumerApp-2
(a través de suConsumerApp-2-Role
rol de IAM) asumen elTopic-B-Read-Role
Rol de IAM para leer mensajes deTopic-B
- C2 - Con el
Topic-B-Read-Role
rol de IAM asumido,ConsumerApp-1
yConsumerApp-2
empezar a consumir mensajes deTopic-B
Tenga en cuenta que esta publicación utiliza el Interfaz de línea de comandos de AWS (CLI de AWS), Formación en la nube de AWS plantillas y la Consola de administración de AWS para el aprovisionamiento y la modificación de los recursos de AWS, y los recursos aprovisionados se facturarán a su cuenta de AWS.
Los pasos de alto nivel son los siguientes:
- Aprovisione un clúster de MSK con control de acceso de IAM y Nube informática elástica de Amazon (Amazon EC2) instancias para aplicaciones cliente.
- Crear
Topic-B
en el clúster de MSK. - Cree roles de IAM para que accedan las aplicaciones cliente
Topic-B
. - Ejecute las aplicaciones de productor y consumidor sin establecer cuotas.
- Configure las cuotas de producción y consumo para las aplicaciones cliente.
- Vuelva a ejecutar las aplicaciones después de establecer las cuotas.
Requisitos previos
Se recomienda leer Parte 1 de esta serie antes de continuar. Para comenzar, necesita lo siguiente:
- Una cuenta de AWS a la que nos referiremos como la cuenta de demostración en esta publicación, suponiendo que su ID de cuenta sea
1111 1111 1111
- Permisos para crear, eliminar y modificar recursos de AWS en la cuenta de demostración
Aprovisione un clúster de MSK con control de acceso de IAM e instancias EC2
Este paso implica el aprovisionamiento de un clúster de MSK con control de acceso de IAM en una VPC en la cuenta de demostración. Además, creamos cuatro instancias EC2 para realizar cambios de configuración en el clúster de MSK y en las aplicaciones de cliente productor y consumidor del host.
Implementar la pila de CloudFormation
- Clona el Repositorio GitHub para descargar los archivos de plantilla de CloudFormation y las aplicaciones cliente de muestra:
- En la consola de AWS CloudFormation, elija Stacks en el panel de navegación.
- Elige Crear pila.
- Preparar plantilla, seleccione La plantilla está lista.
- Fuente de la plantilla, seleccione Subir un archivo de plantilla.
- Cargar la
cfn-msk-stack-1.yaml
archivo deamazon-msk-kafka-quotas/cfn-templates
directorio, luego seleccione Siguiente. - Nombre de pila, introduzca
MSKStack
. - Deje los parámetros por defecto y elija Siguiente.
- Desplácese hasta la parte inferior de la Configurar opciones de pila página y elige Siguiente para continuar.
- Desplácese hasta la parte inferior de la Revisar página, seleccione la casilla de verificación Acepto que CloudFormation puede crear recursos de IAM, y elige Enviar.
La pila tardará aproximadamente 30 minutos en completarse. Una vez que la pila se haya creado correctamente, se crearán los siguientes recursos:
- Una VPC con tres subredes privadas y una subred pública
- Un clúster de MSK con tres agentes con control de acceso de IAM habilitado
- Una instancia EC2 llamada
MSKAdminInstance
para modificar la configuración del clúster de MSK, así como para crear y modificar recursos de AWS - Instancias EC2 para
ProducerApp-1
,ConsumerApp-1
yConsumerApp-2
, uno para cada aplicación cliente - Un rol de IAM independiente para cada instancia EC2 que aloja la aplicación cliente, como se muestra en el diagrama de arquitectura
- De la pila Salidas pestaña, tenga en cuenta la
MSKClusterArn
.
Crear un tema en el clúster de MSK
Crear Topic-B
en el clúster de MSK, complete los siguientes pasos:
- En la consola de Amazon EC2, vaya a su lista de instancias EC2 en ejecución.
- Seleccione
MSKAdminInstance
Instancia EC2 y elija Contacto. - En Gestor de sesiones pestaña, elegir Contacto.
- Ejecute los siguientes comandos en la nueva pestaña que se abre en su navegador:
- Establezca la variable de entorno para que apunte al punto final de IAM de los intermediarios de clúster de MSK:
- Toma nota del valor de
BOOTSTRAP_BROKERS_IAM
. - Ejecute el siguiente comando Kafka CLI para crear
Topic-B
en el clúster de MSK:
Dado que el clúster de MSK se aprovisiona con control de acceso de IAM, la opción --command-config
puntos a config_iam.properties
, que contiene las propiedades necesarias para el control de acceso de IAM, creado por el MSKStack
Pila de CloudFormation.
Las siguientes advertencias pueden aparecer cuando ejecuta los comandos de la CLI de Kafka, pero puede ignorarlas:
- Para verificar eso
Topic-B
ha sido creado, enumere todos los temas:
Cree roles de IAM para que las aplicaciones cliente accedan al Tema-B
Este paso consiste en crear Topic-B-Write-Role
y Topic-B-Read-Role
como se muestra en el diagrama de arquitectura. Topic-B-Write-Role
permite operaciones de escritura en Topic-B
, y puede ser asumido por el ProducerApp-1
. De manera similar, el ConsumerApp-1
y ConsumerApp-2
puede asumir Topic-B-Read-Role
para realizar operaciones de lectura en Topic-B
. Para realizar operaciones de lectura en Topic-B
, ConsumerApp-1
y ConsumerApp-2
también debe pertenecer a los grupos de consumidores especificados durante el MSKStack
actualización de la pila en el paso siguiente.
Crea los roles con los siguientes pasos:
- En la consola de AWS CloudFormation, elija Stacks en el panel de navegación.
- Seleccione
MSKStack
y elige Actualizar. - Preparar plantilla, seleccione Reemplazar plantilla actual.
- Fuente de la plantilla, seleccione Subir un archivo de plantilla.
- Cargar la
cfn-msk-stack-2.yaml
archivo deamazon-msk-kafka-quotas/cfn-templates
directorio, luego seleccione Siguiente. - Proporcione los siguientes parámetros de pila adicionales:
-
- Tema B ARN, introducir el
Topic-B
ARN.
- Tema B ARN, introducir el
El ARN debe estar formateado como arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Utilice el nombre del clúster y el UUID del clúster del ARN del clúster de MSK que anotó anteriormente y proporcione su región de AWS. Para obtener más información, consulte el Control de acceso de IAM para Amazon MSK.
-
- ConsumerApp-1 Nombre del grupo de consumidores, introduzca
ConsumerApp-1
ARN del grupo de consumidores.
- ConsumerApp-1 Nombre del grupo de consumidores, introduzca
Debe estar formateado como arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- ConsumerApp-2 Nombre del grupo de consumidores, introduzca
ConsumerApp-2
ARN del grupo de consumidores.
- ConsumerApp-2 Nombre del grupo de consumidores, introduzca
Utilice un formato similar al ARN anterior.
- Elige Siguiente para continuar.
- Desplácese hasta la parte inferior de la Configurar pila página de opciones y elija Siguiente para continuar.
- Desplácese hasta la parte inferior de la Revisar página, seleccione la casilla de verificación Acepto que CloudFormation puede crear recursos de IAM, y elige Actualizar pila.
La pila tardará aproximadamente 3 minutos en actualizarse. Una vez que la pila se haya actualizado correctamente, se crearán los siguientes recursos:
- Tema-B-Escribir-Rol – Un rol de IAM con permiso para realizar operaciones de escritura en
Topic-B
. Su política de confianza permite que laProducerApp-1-Role
Rol de IAM para asumirlo. - Tema-B-Lectura-Rol – Un rol de IAM con permiso para realizar operaciones de lectura en
Topic-B
. Su política de confianza permite que laConsumerApp-1-Role
yConsumerApp-2-Role
Roles de IAM para asumirlo. Además,ConsumerApp-1
yConsumerApp-2
también debe pertenecer a los grupos de consumidores que especificó al actualizar la pila para realizar operaciones de lectura enTopic-B
.
- De la pila Salidas pestaña, tenga en cuenta la
TopicBReadRoleARN
yTopicBWriteRoleARN
valores.
Ejecute las aplicaciones de productor y consumidor sin establecer cuotas
Aquí corremos ProducerApp-1
, ConsumerApp-1
y ConsumerApp-2
sin fijar sus cuotas. De los pasos anteriores, necesitarás BOOTSTRAP_BROKERS_IAM
valor, Topic-B-Write-Role
ARN y Topic-B-Read-Role
ARN. El código fuente de las aplicaciones cliente y sus versiones empaquetadas están disponibles en el Repositorio GitHub.
Ejecute la aplicación ConsumerApp-1
Para ejecutar el ConsumerApp-1
solicitud, complete los siguientes pasos:
- En la consola de Amazon EC2, seleccione el
ConsumerApp-1
Instancia EC2 y elija Contacto. - En Gestor de sesiones pestaña, elegir Contacto.
- Ejecute los siguientes comandos en la nueva pestaña que se abre en su navegador:
- Ejecute el
ConsumerApp-1
aplicación para empezar a consumir mensajes deTopic-B
:
Usted puede encontrar el código fuente en GitHub para su referencia. Los detalles de los parámetros de la línea de comando son los siguientes:
- –bootstrap-servidores – Punto final de IAM de intermediarios de arranque de clúster de MSK.
- –asumir-role-arn –
Topic-B-Read-Role
ARN del rol de IAM. Asumiendo este papel,ConsumerApp-1
leerá los mensajes del tema. - -región – Región que está utilizando.
- -nombre del tema – Nombre del tema del que
ConsumerApp-1
leerá los mensajes. El valor predeterminado esTopic-B
. - –grupo-de-consumidores – Nombre del grupo de consumidores para
ConsumerApp-1
, como se especifica durante la actualización de la pila. - –nombre-sesión-rol –
ConsumerApp-1
asume elTopic-B-Read-Role
usando el Servicio de token de seguridad de AWS (AWS STS) SDK.ConsumerApp-1
utilizará este nombre de sesión de rol cuando llame alassumeRole
función. - -Identificación del cliente – ID de cliente para
ConsumerApp-1
. - –métricas-de-cuotas-de-consumo-de-impresión – Bandera que indica si las métricas del cliente deben imprimirse en el terminal por
ConsumerApp-1
. - –cw-nombre-dimensión – Reloj en la nube de Amazon nombre de la dimensión que se usará para publicar las métricas de limitación del cliente de
ConsumerApp-1
. - –cw-valor-dimensión – Valor de la dimensión de CloudWatch que se usará para publicar las métricas de limitación del cliente desde
ConsumerApp-1
. - –cw-espacio de nombres – Espacio de nombres donde
ConsumerApp-1
publicará las métricas de CloudWatch para monitorear la limitación.
- Si está satisfecho con el resto de parámetros, use el siguiente comando y cambie
--assume-role-arn
y--region
según su entorno:
La fetch-throttle-time-avg
y fetch-throttle-time-max
las métricas del cliente deben mostrar 0.0, lo que indica que no se está produciendo una limitación para ConsumerApp-1
. Recuerda que no hemos fijado la cuota de consumo para ConsumerApp-1
todavía. Déjalo correr por un tiempo.
Ejecute la aplicación ConsumerApp-2
Para ejecutar el ConsumerApp-2
solicitud, complete los siguientes pasos:
- En la consola de Amazon EC2, seleccione el
ConsumerApp-2
Instancia EC2 y elija Contacto. - En Gestor de sesiones pestaña, elegir Contacto.
- Ejecute los siguientes comandos en la nueva pestaña que se abre en su navegador:
- Ejecute el
ConsumerApp-2
aplicación para empezar a consumir mensajes deTopic-B
:
El código tiene detalles de parámetros de línea de comando similares a los de ConsumerApp-1
discutido anteriormente, excepto por lo siguiente:
- –grupo-de-consumidores – Nombre del grupo de consumidores para
ConsumerApp-2
, como se especifica durante la actualización de la pila. - –nombre-sesión-rol –
ConsumerApp-2
asume elTopic-B-Read-Role
utilizando el SDK de AWS STS.ConsumerApp-2
utilizará este nombre de sesión de rol cuando llame alassumeRole
función. - -Identificación del cliente – ID de cliente para
ConsumerApp-2
.
- Si está satisfecho con el resto de parámetros, use el siguiente comando y cambie
--assume-role-arn
y--region
según su entorno:
La fetch-throttle-time-avg
y fetch-throttle-time-max
las métricas del cliente deben mostrar 0.0, lo que indica que no se está produciendo una limitación para ConsumerApp-2
. Recuerda que no hemos fijado la cuota de consumo para ConsumerApp-2
todavía. Déjalo correr por un tiempo.
Ejecute la aplicación ProducerApp-1
Para ejecutar el ProducerApp-1
solicitud, complete los siguientes pasos:
- En la consola de Amazon EC2, seleccione el
ProducerApp-1
Instancia EC2 y elija Contacto. - En Gestor de sesiones pestaña, elegir Contacto.
- Ejecute los siguientes comandos en la nueva pestaña que se abre en su navegador:
- Ejecute el
ProducerApp-1
aplicación para empezar a enviar mensajes aTopic-B
:
Usted puede encontrar el código fuente en GitHub para su referencia. Los detalles de los parámetros de la línea de comando son los siguientes:
- –bootstrap-servidores – Punto final de IAM de intermediarios de arranque de clúster de MSK.
- –asumir-role-arn –
Topic-B-Write-Role
ARN del rol de IAM. Asumiendo este papel,ProducerApp-1
escribirá mensajes al tema. - -nombre del tema –
ProducerApp-1
enviará mensajes a este tema. El valor predeterminado esTopic-B
. - -región – Región de AWS que está utilizando.
- –num-mensajes – Número de mensajes que
ProducerApp-1
la aplicación enviará al tema. - –nombre-sesión-rol –
ProducerApp-1
asume elTopic-B-Write-Role
utilizando el SDK de AWS STS.ProducerApp-1
utilizará este nombre de sesión de rol cuando llame alassumeRole
función. - -Identificación del cliente – ID de cliente de
ProducerApp-1
. - –tipo de productor –
ProducerApp-1
se puede ejecutar sincrónicamente or de forma asíncrona. Las opciones son sincronizar or Asincrónico. - –métricas-de-cuotas-para-productores-de-impresión – Bandera que indica si las métricas del cliente deben ser impresas en el terminal por ProductorApp-1.
- –cw-nombre-dimensión – Nombre de la dimensión de CloudWatch que se usará para publicar las métricas de limitación del cliente desde ProductorApp-1.
- –cw-valor-dimensión – Valor de la dimensión de CloudWatch que se usará para publicar las métricas de limitación del cliente desde ProductorApp-1.
- –cw-espacio de nombres – El espacio de nombres donde ProductorApp-1 publicará las métricas de CloudWatch para monitorear la limitación.
- Si está satisfecho con el resto de parámetros, use el siguiente comando y cambie
--assume-role-arn
y--region
según su entorno. Para ejecutar un productor síncrono de Kafka, utiliza la opción--producer-type sync
:
Alternativamente, use --producer-type async
para ejecutar un productor asíncrono. Para obtener más detalles, consulte Envío asíncrono.
La produce-throttle-time-avg
y produce-throttle-time-max
las métricas del cliente deben mostrar 0.0, lo que indica que no se está produciendo una limitación para ProducerApp-1
. Recuerda que no hemos fijado la cuota de producción para ProducerApp-1
todavía. Mira esto ConsumerApp-1
y ConsumerApp-2
puede consumir mensajes y notar que no están limitados. Detenga las aplicaciones de cliente consumidor y productor presionando Ctrl + C en sus respectivas pestañas del navegador.
Establecer cuotas de producción y consumo para las aplicaciones de los clientes
Ahora que hemos ejecutado las aplicaciones de productor y consumidor sin cuotas, establecemos sus cuotas y las volvemos a ejecutar.
Abra la Administrador de sesiones terminales para el MSKAdminInstance
Instancia EC2 como se describió anteriormente y ejecute los siguientes comandos para encontrar la configuración predeterminada de uno de los agentes en el clúster de MSK. Los clústeres de MSK se aprovisionan con la configuración de cuotas predeterminada de Kafka.
La siguiente captura de pantalla muestra el Broker-1
valores predeterminados para quota.consumer.default
y quota.producer.default
.
Configuración de cuota de ProducerApp-1
Reemplace los marcadores de posición en todos los comandos de esta sección con valores que correspondan a su cuenta.
De acuerdo con el diagrama de arquitectura discutido anteriormente, configure el ProducerApp-1
producir cuota a 1024 bytes/segundo. Para <ProducerApp-1 Client Id>
y <ProducerApp-1 Role Session>
, asegúrese de usar los mismos valores que usó mientras ejecutaba ProducerApp-1
más temprano (producerapp-1-client-id
y producerapp-1-role-session
, respectivamente):
Verificar el ProducerApp-1
producir cuota usando el siguiente comando:
Puedes eliminar el ProducerApp-1
producir cuota usando el siguiente comando, pero no ejecutes el comando ya que probaremos las cuotas a continuación.
Configuración de cuota de ConsumerApp-1
Reemplace los marcadores de posición en todos los comandos de esta sección con valores que correspondan a su cuenta.
Establezcamos una cuota de consumo de 5120 bytes/segundo para ConsumerApp-1
. For
<ConsumerApp-1 Client Id>
y <ConsumerApp-1 Role Session>
, asegúrese de usar los mismos valores que usó mientras ejecutaba ConsumerApp-1
más temprano (consumerapp-1-client-id
y consumerapp-1-role-session
, respectivamente):
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>
Verificar el ConsumerApp-1
consumir cuota usando el siguiente comando:
Puedes eliminar el ConsumerApp-1
consumir cuota, usando el siguiente comando, pero no ejecutes el comando ya que probaremos las cuotas a continuación.
Configuración de cuota de ConsumerApp-2
Reemplace los marcadores de posición en todos los comandos de esta sección con valores que correspondan a su cuenta.
Establezcamos una cuota de consumo de 1024 bytes/segundo para ConsumerApp-2
. For
<ConsumerApp-2 Client Id>
y <ConsumerApp-2 Role Session>
, asegúrese de usar los mismos valores que usó mientras ejecutaba ConsumerApp-2
más temprano (consumerapp-2-client-id
y consumerapp-2-role-session
, respectivamente):
Verificar el ConsumerApp-2
consumir cuota usando el siguiente comando:
Al igual que con ConsumerApp-1
, puede quitar el ConsumerApp-2
consumir cuota usando el mismo comando con ConsumerApp-2
datos de clientes y usuarios.
Vuelva a ejecutar las aplicaciones de productor y consumidor después de establecer cuotas
Volvamos a ejecutar las aplicaciones para verificar el efecto de las cuotas.
Vuelva a ejecutar ProducerApp-1
Repetición ProducerApp-1
in sincrónico modo con el mismo comando que utilizó anteriormente. La siguiente captura de pantalla ilustra que cuando ProducerApp-1
alcanza su cuota en cualquiera de los intermediarios, el produce-throttle-time-avg
y produce-throttle-time-max client
el valor de las métricas será superior a 0.0. Un valor superior a 0.0 indica que ProducerApp-1
está estrangulado. Permitir ProducerApp-1
para ejecutar durante unos segundos y luego detenerlo usando Ctrl + C.
También puede probar el efecto de la cuota de producción volviendo a ejecutar ProducerApp-1
de nuevo en asincrónico modo (--producer-type async
). Similar a una ejecución síncrona, la siguiente captura de pantalla ilustra que cuando ProducerApp-1
alcanza su cuota en cualquiera de los intermediarios, el produce-throttle-time-avg
y produce-throttle-time-max
el valor de las métricas del cliente será superior a 0.0. Un valor superior a 0.0 indica que ProducerApp-1
está estrangulado. Permitir asíncrono ProducerApp-1
para correr un rato.
Eventualmente verás un TimeoutException
indicando org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
Cuando se usa un asincrónico productor y envía mensajes a una velocidad superior a la que el intermediario puede aceptar debido a la cuota, los mensajes se pondrán en cola en la memoria de la aplicación cliente primero. Eventualmente, el cliente se quedará sin espacio en el búfer si la tasa de envío de mensajes sigue excediendo la tasa de aceptación de mensajes, lo que provocará que el siguiente Producer.send()
llamada para ser bloqueada. Producer.send()
eventualmente lanzará un TimeoutException
si el retraso del tiempo de espera no es suficiente para permitir que el intermediario se ponga al día con la aplicación del productor. Detener ProducerApp-1
mediante el uso Ctrl + C.
Vuelva a ejecutar ConsumerApp-1
Repetición ConsumerApp-1
con el mismo comando que usaste antes. La siguiente captura de pantalla ilustra que cuando ConsumerApp-1
alcanza su cuota, el fetch-throttle-time-avg
y fetch-throttle-time-max client
el valor de las métricas será superior a 0.0. Un valor superior a 0.0 indica que ConsumerApp-1
está estrangulado.
Permitir ConsumerApp-1
para ejecutar durante unos segundos y luego detenerlo usando Ctrl + C.
Vuelva a ejecutar ConsumerApp-2
Repetición ConsumerApp-2
con el mismo comando que usaste antes. Del mismo modo, cuando ConsumerApp-2
alcanza su cuota, el fetch-throttle-time-avg
y fetch-throttle-time-max client
el valor de las métricas estará por encima 0.0. Un valor por encima 0.0 indica que ConsumerApp-2
está estrangulado. Permitir ConsumerApp-2
para funcionar durante unos segundos y luego detenerlo presionando Ctrl + C.
Métricas de cuotas de clientes en Amazon CloudWatch
In Parte 1, explicamos que las métricas de los clientes son métricas expuestas por los clientes que se conectan a los clústeres de Kafka. Examinemos las métricas del cliente en CloudWatch.
- En la consola de CloudWatch, elija Todas las métricas.
- under Espacios de nombres personalizados, elija el espacio de nombres que proporcionó al ejecutar las aplicaciones cliente.
- Elija el nombre de la dimensión y seleccione
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
yfetch-throttle-time-avg metrics
para todas las aplicaciones.
Estas métricas indican el comportamiento de limitación para ProducerApp-1
, ConsumerApp-1
y ConsumerApp-2
aplicaciones probadas con las configuraciones de cuota en la sección anterior. Las siguientes capturas de pantalla indican la limitación de ProducerApp-1
, ConsumerApp-1
y ConsumerApp-2
basado en las cuotas de ancho de banda de la red. ProducerApp-1
, ConsumerApp-1
y ConsumerApp-2
las aplicaciones envían sus respectivas métricas de clientes a CloudWatch. Puedes encontrar el código fuente en GitHub para su referencia.
ID de cliente seguro y nombre de sesión de rol
Discutimos cómo configurar las cuotas de Kafka usando una aplicación Identificación del cliente y autenticado usuario principal. Cuando una aplicación cliente asume un rol de IAM para acceder a los temas de Kafka en un clúster de MSK con la autenticación de IAM habilitada, su usuario principal se representa en el siguiente formato (para obtener más información, consulte identificadores de gestión de identidades y accesos):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Contiene el nombre de sesión de rol (en este caso, producerapp-1-role-session
) que se utiliza en la aplicación cliente al asumir un rol de IAM a través del SDK de AWS STS. La aplicación cliente código fuente está disponible para su referencia. El Identificación del cliente es una cadena de nombre lógico (por ejemplo, producerapp-1-client-id
) que está configurado en el código de la aplicación por el equipo de la aplicación. Por lo tanto, una aplicación puede hacerse pasar por otra aplicación si obtiene la Identificación del cliente y nombre de sesión de rol de la otra aplicación y si tiene permiso para asumir el mismo rol de IAM.
Como se muestra en el diagrama de arquitectura, ConsumerApp-1
y ConsumerApp-2
son dos aplicaciones cliente separadas con sus respectivas asignaciones de cuotas. Porque ambos tienen permiso para asumir el mismo rol de IAM (Topic-B-Read-Role
) en la cuenta de demostración, se les permite consumir mensajes de Topic-B
. Por lo tanto, los intermediarios de clústeres de MSK los distinguen en función de su identificaciones de clientes y usuarios (que contienen sus respectivos nombre de sesión de rol valores). Si ConsumerApp-2
de alguna manera obtiene la ConsumerApp-1
nombre de sesión de rol y Identificación del cliente, puede suplantar ConsumerApp-1
especificando el ConsumerApp-1
nombre de sesión de rol y Identificación del cliente en el código de la aplicación.
Asumamos ConsumerApp-1
usos consumerapp-1-client-id
y consumerapp-1-role-session
como su Identificación del cliente y nombre de sesión de rol, respectivamente. Por lo tanto, ConsumerApp-1's
autenticado usuario principal aparecerá de la siguiente manera cuando asuma la Topic-B-Read-Role
Rol de gestión de identidades y accesos:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
De manera similar, los ConsumerApp-2
usos consumerapp-2-client-id
y consumerapp-2-role-session
como su Identificación del cliente y nombre de sesión de rol, respectivamente. Por lo tanto, ConsumerApp-2's
autenticado usuario principal aparecerá de la siguiente manera cuando asuma la Topic-B-Read-Role
Rol de gestión de identidades y accesos:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
obtiene ConsumerApp-1's
Identificación del cliente y nombre de sesión de rol y los especifica en su código de aplicación, los intermediarios de clústeres de MSK lo tratarán como ConsumerApp-1
y ver su Identificación del cliente as consumerapp-1-client-id
, y el autenticado usuario director de la siguiente manera:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Esto permite ConsumerApp-2
para consumir datos del clúster MSK a una velocidad máxima de 5120 bytes por segundo en lugar de 1024 bytes por segundo según su asignación de cuota original. Como consecuencia, ConsumerApp-1's
el rendimiento se verá afectado negativamente si ConsumerApp-2
se ejecuta simultáneamente.
Arquitectura mejorada
puedes presentar Director de secretos de AWS y Servicio de administración de claves de AWS (AWS KMS) en la arquitectura para asegurar aplicaciones' identificaciones de clientes y nombres de sesiones de roles. Para proporcionar una gobernanza más sólida, el ID de cliente de las aplicaciones y el nombre de la sesión de rol deben almacenarse como secretos cifrados en Secrets Manager. Las políticas de recursos de IAM asociadas con secretos cifrados y una clave administrada por el cliente (CMK) de KMS permitirán que las aplicaciones accedan y descifren solo su ID de cliente y nombre de sesión de función respectivos. De esta forma, las aplicaciones no podrán acceder al ID de cliente ni al nombre de la sesión de rol de las demás ni hacerse pasar por otras. La siguiente imagen muestra la arquitectura mejorada.
El flujo actualizado tiene las siguientes etapas:
- P1 –
ProducerApp-1
recupera suclient-id
yrole-session-name
secretos del administrador de secretos - P2 –
ProducerApp-1
configura el secretoclient-id
asCLIENT_ID_CONFIG
en el código de la aplicación, y asumeTopic-B-Write-Role
(a través de suProducerApp-1-Role
rol de IAM) pasando el secretorole-session-name
al SDK de AWS STSassumeRole
Llamada de función - P3 - Con el
Topic-B-Write-Role
rol de IAM asumido,ProducerApp-1
comienza a enviar mensajes aTopic-B
- C1 –
ConsumerApp-1
yConsumerApp-2
recuperar sus respectivosclient-id
yrole-session-name
secretos del administrador de secretos - C2 –
ConsumerApp-1
yConsumerApp-2
configurar su respectivo secretoclient-id
asCLIENT_ID_CONFIG
en su código de aplicación, y asumirTopic-B-Write-Role
(a través deConsumerApp-1-Role
yConsumerApp-2-Role
funciones de IAM, respectivamente) pasando su secretorole-session-name
en el SDK de AWS STSassumeRole
Llamada de función - C3 - Con el
Topic-B-Read-Role
rol de IAM asumido,ConsumerApp-1
yConsumerApp-2
empezar a consumir mensajes deTopic-B
Consulte la documentación para Director de secretos de AWS y AWS KMS para obtener una mejor comprensión de cómo encajan en la arquitectura.
Limpiar recursos
Vaya a la consola de CloudFormation y elimine el MSKStack
pila. Todos los recursos creados durante esta publicación serán eliminados.
Conclusión
En esta publicación, cubrimos pasos detallados para configurar las cuotas de Amazon MSK y demostramos su efecto a través de aplicaciones cliente de muestra. Además, discutimos cómo puede usar las métricas del cliente para determinar si una aplicación cliente está limitada. También destacamos un posible problema con los ID de cliente de texto sin formato y los nombres de sesión de rol. Recomendamos implementar las cuotas de Kafka con Amazon MSK mediante Secrets Manager y AWS KMS según el diagrama de arquitectura revisado para garantizar una arquitectura de confianza cero.
Si tiene comentarios o preguntas sobre esta publicación, incluida la arquitectura revisada, nos complacerá saber de usted. Esperamos que hayas disfrutado leyendo esta publicación.
Sobre la autora
Vikas Bajaj es gerente sénior, arquitectos de soluciones, servicios financieros en Amazon Web Services. Con más de dos décadas de experiencia en servicios financieros y trabajando con empresas nativas digitales, asesora a los clientes sobre diseño de productos, hojas de ruta tecnológicas y arquitecturas de aplicaciones.
- Distribución de relaciones públicas y contenido potenciado por SEO. Consiga amplificado hoy.
- EVM Finanzas. Interfaz unificada para finanzas descentralizadas. Accede Aquí.
- Grupo de medios cuánticos. IR/PR amplificado. Accede Aquí.
- PlatoAiStream. Inteligencia de datos Web3. Conocimiento amplificado. Accede Aquí.
- Fuente: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :posee
- :es
- :no
- :dónde
- $ UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Poder
- Nuestra Empresa
- arriba
- Aceptar
- aceptar
- de la máquina
- Mi Cuenta
- reconocer
- a través de
- add
- adición
- Adicionales
- Adicionalmente
- Después
- de nuevo
- Todos
- asignación
- asignaciones
- permitir
- permite
- también
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- y
- Otra
- cualquier
- APACHE
- Apache Kafka
- Aparecer
- Aplicación
- aplicaciones
- aproximadamente
- arquitectura
- somos
- AS
- asociado
- ficticio
- At
- autenticado
- Autenticación
- Hoy Disponibles
- AWS
- Formación en la nube de AWS
- Ancho de banda
- basado
- BE
- porque
- esto
- antes
- "Ser"
- mejores
- bloqueado
- Bootstrap
- ambas
- Fondo
- Box
- corredor
- corredores
- cada navegador
- buffer
- negocios
- pero
- by
- llamar al
- , que son
- llamar
- PUEDEN
- case
- CAT
- lucha
- causando
- CD
- central
- el cambio
- Cambios
- comprobar
- Elige
- clase
- cliente
- clientes
- Médico
- código
- Algunos
- completar
- Calcular
- conceptos
- Configuración
- configurado
- Conectándote
- En consecuencia
- Consola
- consumir
- consumidor
- contiene
- continue
- continúa
- continuo
- control
- cubierto
- Para crear
- creado
- Creamos
- Current
- cliente
- Clientes
- datos
- Plataforma de datos
- décadas
- Descifrar
- Predeterminado
- retrasar
- De demostración
- demostrado
- Dependiente
- describir
- descrito
- Diseño
- detallado
- detalles
- Determinar
- determina
- Dimensiones
- discutido
- Pantalla
- distinguir
- documentación
- descargar
- dos
- durante
- cada una
- Más temprano
- echo
- efecto
- ya sea
- habilitar
- facilita
- permite
- cifrado
- Punto final
- hacer cumplir
- mejorado
- garantizar
- Participar
- Entorno
- Errores
- Éter (ETH)
- finalmente
- examinar
- ejemplo
- exceden
- Excepto
- experience
- explicado
- explicación
- exportar
- expuesto
- realimentación
- pocos
- Figura
- Archive
- archivos
- financiero
- servicios financieros
- Encuentre
- Nombre
- cómodo
- de tus señales
- siguiendo
- siguiente
- formato
- Digital XNUMXk
- Desde
- función
- Además
- obtener
- Git
- GitHub
- gobierno
- mayor
- Grupo procesos
- Grupo
- Ahorrar
- Tienen
- he
- oír
- de alto nivel
- Destacado
- esperanza
- fortaleza
- anfitriones
- Cómo
- Como Hacer
- HTML
- http
- HTTPS
- AMI
- ID
- Identidad
- ids
- if
- ilustra
- imagen
- impactados
- implementación
- implementación
- in
- Incluye
- indicar
- Indica
- indicando
- INSTRUMENTO individual
- información
- ejemplo
- un elemento indispensable
- dentro
- introducir
- Introducido
- ISN
- IT
- SUS
- Java
- jpg
- kafka
- Clave
- conocido
- LIMITE LAS
- línea
- líneas
- Lista
- lógico
- para lograr
- gestionado
- Management
- gerente
- máximas
- Puede..
- mesurado
- Salud Cerebral
- la vida
- Métrica
- minutos
- Moda
- modificar
- Monitorear
- más,
- MS
- mucho más
- múltiples
- debe
- nombre
- nombres
- Navegar
- Navegación
- ¿ Necesita ayuda
- negativamente
- del sistema,
- Nuevo
- Next
- no
- señaló
- Aviso..
- número
- obtiene
- ocurriendo
- of
- on
- ONE
- , solamente
- abre
- operado
- Operaciones
- Optión
- Opciones
- or
- solicite
- reconocida por
- Otro
- salir
- Más de
- empaquetado
- página
- cristal
- parámetro
- parámetros
- parte
- pasado
- Pasando (Paso)
- camino
- porcentaje
- realizar
- actuación
- permiso
- Texto sin formato
- plataforma
- Platón
- Inteligencia de datos de Platón
- PlatónDatos
- punto
- puntos
- políticas
- política
- Publicación
- posible
- prensado
- evitar
- anterior
- previamente
- Director de la escuela
- privada
- tratamiento
- producir
- productor
- Producto
- diseño de producto
- propiedades
- proporcionar
- previsto
- público
- publicar
- Preguntas
- Rate
- más bien
- alcances
- Leer
- Reading
- recomiendan
- recomendado
- referido
- región
- recordarlo
- remove
- reemplazar
- repositorio
- representado
- solicita
- solicitudes
- Requisitos
- Recurso
- Recursos
- aquellos
- respectivamente
- RESTO
- hojas de ruta
- Función
- También soy miembro del cuerpo docente de World Extreme Medicine (WEM) y embajadora europea de igualdad para The Transformational Travel Council (TTC). En mi tiempo libre, soy una incansable aventurera, escaladora, patrona de día, buceadora y defensora de la igualdad de género en el deporte y la aventura. En XNUMX, fundé Almas Libres, una ONG nacida para involucrar, educar y empoderar a mujeres y niñas a través del deporte urbano, la cultura y la tecnología.
- Ejecutar
- correr
- s
- mismo
- satisfecho
- Satisfecho con
- capturas de pantalla
- Sdk
- Segundo
- segundos
- Secreto
- Sección
- seguro
- EN LINEA
- token de seguridad
- ver
- envío
- enviando
- mayor
- separado
- Serie
- Servicios
- Sesión
- set
- pólipo
- ajustes
- tienes
- mostrado
- Shows
- similares
- Del mismo modo
- desde
- Soluciones
- Fuente
- código fuente
- Espacio
- soluciones y
- especificado
- montón
- etapas
- comienzo
- fundó
- paso
- pasos
- Detener
- almacenados
- en streaming
- Cordón
- más fuerte
- subredes
- posterior
- Con éxito
- tal
- suficiente
- suministrada
- soportes
- ¡Prepárate!
- equipo
- Tecnología
- plantilla
- plantillas
- terminal
- test
- probado
- Pruebas
- que
- esa
- La
- La Fuente
- su
- Les
- luego
- por lo tanto
- ellos
- así
- Tres
- A través de esta formación, el personal docente y administrativo de escuelas y universidades estará preparado para manejar los recursos disponibles que derivan de la diversidad cultural de sus estudiantes. Además, un mejor y mayor entendimiento sobre estas diferencias y similitudes culturales permitirá alcanzar los objetivos de inclusión previstos.
- rendimiento
- equipo
- a
- ficha
- tema
- Temas
- sorpresa
- Confía en
- dos
- tipo
- tipos
- comprensión
- Actualizar
- actualizado
- actualización
- utilizan el
- usado
- Usuario
- usuarios
- usos
- usando
- propuesta de
- Valores
- verificar
- vía
- Ver
- fue
- Camino..
- we
- web
- servicios web
- WELL
- cuando
- sean
- que
- mientras
- seguirá
- sin
- trabajando
- escribir
- aún
- Usted
- tú
- zephyrnet