Introducción a la ingesta de streaming de Amazon Managed Streaming para Apache Kafka - Amazon Redshift

Introducción a la ingesta de streaming de Amazon Managed Streaming para Apache Kafka

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 y Amazon MSK sin servidor y con Kinesis. 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 Managed Streaming para Apache Kafka, 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:

  1. Cree un esquema externo que se asigne al origen de datos de streaming.

  2. 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 tema de Kafka 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 formato SUPER semiestructurado o bien definir un esquema cuyo resultado sean datos convertidos a tipos de datos de Amazon Redshift. Cuando consulta la vista materializada, los registros devueltos son una vista de un punto temporal del tema.

  1. Si utiliza AUTHENTICATION NONE para conectarse a MSK, no será necesario ningún rol de IAM. No obstante, si utiliza AUTHENTICATION IAM, deberá tener un rol de IAM con los permisos adecuados aplicados. Cree un rol de IAM con una política de confianza que permita que el clúster de Amazon Redshift o el grupo de trabajo de Amazon Redshift sin servidor asuma el rol. Cuando se crea, el rol debe tener aplicados los permisos de la política de IAM como en el ejemplo siguiente. Estos permisos admiten la autenticación de IAM con el clúster de Amazon MSK. 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.

    { "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/*" ] } ] }
  2. 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 del método de autenticación utilizado para el clúster, cuando use Amazon MSK. Para obtener más información, consulte Información de puertos y Acceso desde AWS pero fuera de la VPC.

    Tenga en cuenta que la autenticación de clientes con mTLS no es compatible con la ingesta de streaming. Para obtener más información, consulte la sección sobre Límites.

    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

    La autenticación de Amazon Redshift se establece en la instrucción CREATE EXTERNAL SCHEMA.

    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 IAM cuando use mTLS.

  3. 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.

    nota

    Para recuperar la URL de los agentes de arranque de Amazon MSK, Amazon Redshift realiza una llamada a la API GetBootstrapBrokers con los permisos proporcionados por el rol de IAM asociado. Tenga en cuenta que, para que esta solicitud se realice correctamente cuando el enrutamiento de VPC mejorado esté habilitado, la subred del clúster aprovisionado de Amazon Redshift o del grupo de trabajo de Amazon Redshift sin servidor debe tener una puerta de enlace NAT o una puerta de enlace de Internet. Las ACL de su red y las reglas de salida de los grupos de seguridad para la subred antes mencionada también deben permitir el acceso a los puntos de conexión de servicio de la API de Amazon MSK. Para obtener más información, consulte Cuotas y puntos de conexión de Amazon Managed Streaming for Apache Kafka. Encontrará más detalles para proporcionar el URI de bootstrap-broker en el siguiente paso.

  4. 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 } URI 'msk-cluster-uri:port_number' CLUSTER_ARN 'msk-cluster-arn';

    Para especificar la transmisión desde Amazon MSK, utilice FROM MSK. Para conectarse, debe proporcionar el URI de bootstrap-broker y CLUSTER_ARN. La ingesta de streaming para Amazon MSK proporciona los siguientes tipos de autenticación al crear el esquema externo:

    • ninguno: especifica que no hay ningún paso de autenticación.

    • 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.

    En el siguiente ejemplo se muestra cómo establecer el URI del agente y el CLUSTER_ARN para 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 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' CLUSTER_ARN 'arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4';

    Este comando crea un esquema externo con propiedades de conexión para Amazon MSK. Tenga en cuenta lo siguiente:

    • En este caso, el tipo de autenticación especificado es none.

    • En el URI se especifica el URI de bootstrap-broker, con el puerto 9092. Recuperarlo no requiere herramientas adicionales ni llamadas a la API. La obtención del URI del agente de arranque para un clúster de Amazon MSK se detalla en Obtener los agentes de arranque para un clúster de Amazon MSK en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

    • El CLUSTER_ARN es necesario en este caso, junto con el URI del agente.

    Para obtener más información sobre la creación de un esquema externo, consulte CREATE EXTERNAL SCHEMA.

  5. Cree una vista materializada para consumir los datos del tema. Use un comando SQL como este ejemplo si no quiere que se omitan los registros de errores.

    CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT * FROM MySchema."mytopic";

    En el siguiente ejemplo, se define una vista materializada con datos de origen JSON. En la siguiente vista se valida que los datos tengan formato JSON y utf8 válido. 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 a true en el nivel de la base de datos. Para obtener más información, consulte Nombres e identificadores e enable_case_sensitive_identifier.

    CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS SELECT kafka_partition, kafka_offset, kafka_timestamp_type, kafka_timestamp, kafka_key, JSON_PARSE(kafka_value) as kafka_data, kafka_headers, refresh_time FROM MySchema."mytopic" WHERE CAN_JSON_PARSE(kafka_value);

    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, los errores de lógica empresarial pueden hacer que la ingesta de streaming se bloquee 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.

  6. 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;
  7. 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.