Introducción a la ingesta de streaming de Amazon Managed Streaming para Apache Kafka (Amazon MSK)
En este tema se describe cómo consumir datos de streaming de Amazon MSK mediante una vista materializada.
El objetivo de la ingesta de streaming de Amazon Redshift es simplificar el proceso de ingesta directa de datos de flujo de un servicio de streaming en Amazon Redshift o Amazon Redshift sin servidor. Esto funciona con Amazon MSK aprovisionado y Amazon MSK sin servidor y con Kinesis Data Streams. La ingesta de streaming de Amazon Redshift elimina la necesidad de preparar un flujo de Kinesis Data Streams o un tema de Amazon MSK en Amazon S3 antes de la ingesta de los datos del flujo en Redshift.
A nivel técnico, la ingesta de streaming, tanto de Amazon Kinesis Data Streams como de Amazon MSK, proporciona una ingesta de baja latencia y alta velocidad de datos de streaming o de temas en una vista materializada de Amazon Redshift. Tras la configuración, si utiliza la actualización de vistas materializadas, podrá recibir grandes volúmenes de datos.
Configure la ingesta de streaming de Amazon Redshift para Amazon MSK mediante los siguientes pasos:
Cree un esquema externo que se asigne al origen de datos de streaming.
Cree una vista materializada que haga referencia al esquema externo.
Debe disponer de un origen de Amazon MSK antes de configurar la ingesta de streaming de Amazon Redshift. Si no dispone de un origen, siga las instrucciones de Getting Started Using Amazon MSK (Introducción a Amazon MSK).
nota
Ingesta de streaming y Amazon Redshift sin servidor: los pasos de configuración de este tema se aplican a los clústeres de Amazon Redshift y Amazon Redshift sin servidor aprovisionados. Para obtener más información, consulte Comportamiento y tipos de datos de ingesta de streaming.
Configuración de permisos de IAM y realización de la ingesta de streaming desde Kafka
Suponiendo que disponga de un clúster de Amazon MSK, el primer paso es definir un esquema en Redshift con CREATE EXTERNAL SCHEMA
y hacer referencia al clúster de Amazon MSK como el origen de datos. Después de eso, para acceder a los datos del tema, defina STREAM
en una vista materializada. Puede almacenar registros del tema con el tipo de datos VARBYTE de Amazon Redshift predeterminado o definir un esquema que convierte los datos en un formato SUPER
semiestructurado. Cuando consulta la vista materializada, los registros devueltos son una vista de un punto temporal del tema.
-
Si utiliza AUTHENTICATION NONE para conectarse a MSK, no será necesario ningún rol de IAM. Sin embargo, si utiliza AUTHENTICATION IAM o MTLS para autenticarse con el clúster de Amazon MSK, el clúster de Amazon Redshift o el espacio de nombres de Amazon Redshift sin servidor deben tener un rol de IAM asociado con los permisos adecuados. Cree un rol de IAM con una política de confianza que permita que el clúster de Amazon Redshift o el espacio de nombres de Amazon Redshift sin servidor asuman el rol. Después de crear el rol, agregue uno de los siguientes permisos para admitir IAM o MTLS. Para la autenticación mTLS, los certificados que utiliza Amazon Redshift se pueden almacenar en AWS Certificate Manager o AWS Secrets Manager, por lo que debe elegir la política que coincida con el lugar donde se almacena el certificado. Asocie el rol al clúster de Amazon Redshift aprovisionado o un espacio de nombres de Redshift sin servidor. Para obtener información sobre cómo configurar la política de confianza del rol de IAM, consulte Autorización a Amazon Redshift para acceder a otros servicios de AWS en su nombre.
AUTHENTICATION IAM:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MSKIAMpolicy", "Effect": "Allow", "Action": [ "kafka-cluster:ReadData", "kafka-cluster:DescribeTopic", "kafka-cluster:Connect" ], "Resource": [ "arn:aws:kafka:*:0123456789:cluster/MyTestCluster/*", "arn:aws:kafka:*:0123456789:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:*:0123456789:group/MyTestCluster/*" ] } ] }
AUTHENTICATION MTLS: se utiliza un certificado almacenado en AWS Certificate Manager
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MSKmTLSACMpolicy", "Effect": "Allow", "Action": [ "acm:ExportCertificate" ], "Resource": [ "arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID" ] } ] }
AUTHENTICATION MTLS: se utiliza un certificado almacenado en AWS Secrets Manager
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MSKmTLSSecretsManagerpolicy", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:444455556666:secret:secret_ID" ] } ] }
Consulte la VPC y verifique que el clúster de Amazon Redshift o Amazon Redshift sin servidor dispone de una ruta para llegar al clúster de Amazon MSK. Las reglas de grupo de seguridad de entrada del clúster de Amazon MSK deben permitir el grupo de seguridad del clúster de Amazon Redshift o el grupo de trabajo de Amazon Redshift sin servidor. Los puertos que especifique dependerán de los métodos de autenticación configurados en el clúster de Amazon MSK. Para obtener más información, consulte Información de puertos y Acceso desde AWS pero fuera de la VPC.
En la siguiente tabla se muestran las opciones de configuración complementarias a establecer para la ingesta de streaming desde Amazon MSK:
Configuración de Amazon Redshift Configuración de Amazon MSK Puerto que se abrirá entre Redshift y Amazon MSK AUTHENTICATION NONE Transporte TLS desactivado 9092 AUTHENTICATION NONE Transporte TLS habilitado 9094 AUTHENTICATION IAM IAM 9098/9198 AUTHENTICATION MTLS Transporte TLS habilitado 9094 La autenticación de Amazon Redshift se establece en la instrucción CREATE EXTERNAL SCHEMA.
nota
En caso de que el clúster de Amazon MSK tenga activada la autenticación de seguridad de la capa de transporte mutua (mTLS), al configurar AUTHENTICATION NONE se indica a Amazon Redshift que utilice el puerto 9094 para el acceso sin autenticación. No obstante, se producirá un error porque el puerto lo está utilizando la autenticación mTLS. Por esto, le recomendamos que cambie a AUTHENTICATION mtls cuando use mTLS.
Habilite el enrutamiento de VPC mejorado en el clúster de Amazon Redshift o grupo de trabajo de Amazon Redshift sin servidor. Para obtener más información, consulte Habilitación del enrutamiento de VPC mejorado.
-
En Amazon Redshift, cree un esquema externo para asignarlo al clúster de Amazon MSK. La sintaxis es la siguiente:
CREATE EXTERNAL SCHEMA MySchema FROM MSK [ IAM_ROLE [ default | 'iam-role-arn' ] ] AUTHENTICATION [ none | iam | mtls ] [AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret-arn' ];
En la cláusula
FROM
,MSK
indica que el esquema asigna los datos de los Managed Kafka Services.AUTHENTICATION
indica el tipo de autenticación para la ingesta de streaming con Amazon MSK. Hay tres tipos disponibles:ninguno: especifica que no se requiere autenticación. Esto corresponde al acceso no autenticado en MSK.
iam: especifica la autenticación de IAM. Al elegir esta opción, asegúrese de que el rol de IAM tenga permisos para la autenticación de IAM. Para obtener más información sobre la configuración de las políticas de IAM requeridas, consulte Configuración de permisos de IAM y realización de la ingesta de streaming desde Kafka.
mtls: especifica que la seguridad de la capa de transporte mutua proporciona una comunicación segura al facilitar la autenticación entre un cliente y un servidor. En este caso, el cliente es Redshift y el servidor es Amazon MSK. Para obtener más información acerca de cómo configurar la ingesta de streaming con mTLS, consulte Autenticación con mTLS para ingesta de streaming de Redshift desde Amazon MSK.
Tenga en cuenta que la autenticación de Amazon MSK con un nombre de usuario y la contraseña no es compatible con la ingesta de streaming.
AUTHENTICATION_ARN
especifica el ARN del certificado de seguridad de la capa de transporte mutua (mTLS) de ACM que se utiliza para establecer una conexión cifrada.SECRET_ARN
especifica el arn del secreto de AWS Secrets Manager que contiene el certificado que utilizará Amazon Redshift para mTLS.En los siguientes ejemplos se muestra cómo establecer el URI del agente y el clúster de Amazon MSK al crear el esquema externo:
CREATE EXTERNAL SCHEMA my_schema FROM MSK IAM_ROLE 'arn:aws:iam::012345678901:role/my_role' AUTHENTICATION IAM URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098'
Uso sin autenticación:
CREATE EXTERNAL SCHEMA my_schema FROM MSK AUTHENTICATION none URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092'
Uso de mTLS
CREATE EXTERNAL SCHEMA my_schema FROM MSK IAM_ROLE 'arn:aws:iam::012345678901:role/my_role' AUTHENTICATION MTLS URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b- 2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094' AUTHENTICATION_ARN 'acm-certificate-arn' | [ SECRET_ARN 'ssm-secret-arn' ];
Para obtener más información sobre la creación de un esquema externo, consulte CREATE EXTERNAL SCHEMA.
-
Cree una vista materializada para consumir los datos del tema. Utilice un comando SQL como el del ejemplo siguiente.
CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT * FROM MySchema."mytopic";
En los nombres de tema de Kafka se distingue entre mayúsculas y minúsculas, y pueden estar en mayúsculas y minúsculas. Para la ingesta de temas con nombres en mayúsculas, puede establecer la configuración
enable_case_sensitive_identifier
entrue
en el nivel de sesión o de base de datos. Para obtener más información, consulte Nombres e identificadores e enable_case_sensitive_identifier.Para activar la actualización automática, utilice
AUTO REFRESH YES
. El comportamiento predeterminado es la actualización manual.Las columnas de metadatos incluyen lo siguiente:
Columna de metadatos Tipo de datos Descripción kafka_partition bigint Id. de partición del registro del tema de Kafka kafka_offset bigint Desplazamiento del registro en el tema de Kafka para una partición determinada kafka_timestamp_type char(1) Tipo de la marca temporal utilizada en el registro de Kafka:
C: hora de creación del registro (CREATE_TIME) en el cliente
L: hora de adición del registro (LOG_APPEND_TIME) en el servidor Kafka
U: hora de creación del registro no está disponible (NO_TIMESTAMP_TYPE)
kafka_timestamp TIMESTAMP sin zona horaria Valor de la marca temporal del registro kafka_key varbyte Clave del registro de Kafka kafka_value varbyte Registro recibido de Kafka kafka_headers super Encabezado del registro recibido de Kafka refresh_time TIMESTAMP sin zona horaria La hora de inicio de la actualización Es importante tener en cuenta, si tiene lógica empresarial en su definición de vista materializada, que los resultados en los errores de lógica empresarial pueden hacer que la ingesta de streaming produzca errores en algunos casos. Esto podría llevarlo a tener que eliminar y volver a crear la vista materializada. Para evitarlo, le recomendamos que mantenga su lógica empresarial simple y que aplique lógica adicional a los datos después de la ingesta.
Actualice la vista, lo que invoca a Amazon Redshift para que lea del tema y cargue los datos en la vista materializada.
REFRESH MATERIALIZED VIEW MyView;
Consulte los datos en la vista materializada.
select * from MyView;
La vista materializada se actualiza directamente desde el tema cuando se ejecuta
REFRESH
. Se crea una vista materializada que se asigna al origen de datos del tema de Kafka. Puede realizar filtrados y agregaciones en los datos como parte de la definición de la vista materializada. La vista materializada de ingesta de streaming (vista materializada base) solo puede hacer referencia a un tema de Kafka, pero se pueden crear vistas materializadas adicionales que se unan con la vista materializada base y con otras vistas materializadas o tablas.
Para obtener más información sobre las limitaciones para la ingesta de streaming, consulte Comportamiento y tipos de datos de ingesta de streaming.