

# Conector para MSK de Amazon Athena
<a name="connectors-msk"></a>

El conector de Amazon Athena para [Amazon MSK](https://aws.amazon.com/msk/) permite que Amazon Athena ejecute consultas SQL en los temas de Apache Kafka. Use este conector para ver los temas de [Apache Kafka](https://kafka.apache.org/) como tablas y los mensajes como filas en Athena. Para obtener información adicional, consulte [Analizar datos de streaming en tiempo real en Amazon MSK con Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-real-time-streaming-data-in-amazon-msk-with-amazon-athena/) en el Blog de macrodatos de AWS.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-msk-prerequisites"></a>

Implemente el conector en su Cuenta de AWS mediante la consola de Athena o AWS Serverless Application Repository. Para obtener más información, consulte [Cómo crear una conexión de origen de datos](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-msk-limitations"></a>
+ Las operaciones de escritura de DDL no son compatibles.
+ Cualquier límite de Lambda relevante. Para obtener más información, consulte [Cuotas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.
+ Los tipos de datos de fecha y hora no son compatibles con el tipo de archivo CSV y se tratan como valores varchar.
+ No se admite la asignación a campos JSON anidados. El conector solo asigna campos de nivel superior.
+ El conector no admite tipos complejos. Los tipos complejos se interpretan como cadenas.
+ Para extraer valores JSON complejos o trabajar con ellos, use las funciones relacionadas con JSON disponibles en Athena. Para obtener más información, consulte [Extracción de datos JSON de cadenas](extracting-data-from-JSON.md).
+ El conector no permite el acceso a metadatos de mensajes de Kafka.

## Términos
<a name="connectors-msk-terms"></a>
+ **Controlador de metadatos**: un controlador de Lambda que recupera los metadatos de la instancia de base de datos.
+ **Controlador de registros**: un controlador de Lambda que recupera registros de datos de la instancia de base de datos.
+ **Controlador compuesto**: un controlador de Lambda que recupera tanto los metadatos como los registros de datos de la instancia de base de datos.
+ **Punto de conexión de Kafka**: una cadena de texto que establece una conexión con una instancia de Kafka.

## Compatibilidad con clústeres
<a name="connectors-msk-cluster-compatibility"></a>

El conector para MSK se puede usar con los siguientes tipos de clústeres.
+ **Clúster aprovisionado por MSK**: usted especifica, supervisa y escala manualmente la capacidad del clúster.
+ **Clúster sin servidor de MSK**: proporciona capacidad bajo demanda que se escala automáticamente en correspondencia con la E/S de la aplicación.
+ **Kafka independiente**: una conexión directa con Kafka (autenticada o no autenticada).

## Métodos de autenticación compatibles
<a name="connectors-msk-supported-authentication-methods"></a>

El conector admite los siguientes métodos de autenticación.
+ [SASL/IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) 
+ [SSL](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)
+ [SASL/SCRAM](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html)
+ SASL/PLAIN
+ SASL/PLAINTEXT
+ NO\_AUTH

  Para obtener más información, consulte [Configuración de la autenticación del conector de Athena MSK](#connectors-msk-setup-configuring-authentication).

## Formatos compatibles de datos de entrada
<a name="connectors-msk-supported-input-data-formats"></a>

El conector admite los siguientes formatos de datos de entrada.
+ JSON
+ CSV

## Parameters
<a name="connectors-msk-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Athena MSK.

### Conectores federados del catálogo de datos de Athena
<a name="connectors-msk-connection-legacy"></a>
+ **auth\_type**: especifica el tipo de autenticación del clúster. El conector admite los siguientes tipos de autenticación:
  + **NO\_AUTH**: conexión directa a Kafka sin autenticación (por ejemplo, a un clúster de Kafka implementado en una instancia de EC2 que no usa autenticación).
  + **SASL\_SSL\_PLAIN**: este método usa el protocolo de seguridad `SASL_SSL` y el mecanismo `PLAIN` SASL.
  + **SASL\_PLAINTEXT\_PLAIN**: este método usa el protocolo de seguridad `SASL_PLAINTEXT` y el mecanismo `PLAIN` SASL.
**nota**  
Apache Kafka admite los tipos de autenticación `SASL_SSL_PLAIN` y `SASL_PLAINTEXT_PLAIN`; sin embargo, Amazon MSK no los admite.
  + **SASL\_SSL\_AWS\_MSK\_IAM**: el control de acceso de IAM para Amazon MSK le permite gestionar tanto la autenticación como la autorización de su clúster de MSK. Las credenciales de AWS de usuario (clave secreta y clave de acceso) se usan para conectarse al clúster. Para obtener más información, consulte [Control de acceso de IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.
  + **SASL\_SSL\_SCRAM\_SHA512**: puede usar este tipo de autenticación para controlar el acceso a los clústeres de Amazon MSK. Este método almacena el nombre de usuario y la contraseña en AWS Secrets Manager. El secreto debe estar asociado al clúster de Amazon MSK. Para obtener más información, consulte [Configurar la autenticación SASL/SCRAM para un clúster de Amazon MKS](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.
  + **SSL**: la autenticación SSL utiliza archivos del almacén de claves y el almacén de confianza para conectarse con el clúster de Amazon MSK. Debe generar los archivos del almacén de confianza y el almacén de claves, cargarlos en un bucket de Amazon S3 y proporcionar la referencia a Amazon S3 cuando implemente el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. El cliente debe proporcionar la clave secreta de AWS cuando se implemente el conector. Para obtener más información, consulte [Autenticación TLS mutua](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

    Para obtener más información, consulte [Configuración de la autenticación del conector de Athena MSK](#connectors-msk-setup-configuring-authentication).
+ **certificates\_s3\_reference**: la ubicación de Amazon S3 que contiene los certificados (los archivos del almacén de claves y del almacén de confianza).
+ **disable\_spill\_encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, de modo que los datos que se vierten a S3 se cifran mediante AES-GCM, ya sea mediante una clave generada aleatoriamente o KMS para generar claves. La desactivación del cifrado de vertido puede mejorar el rendimiento, especialmente si su ubicación de vertido usa [cifrado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\_endpoint**: los detalles del punto de conexión que se van a proporcionar a Kafka. Por ejemplo, para un clúster de Amazon MSK, debe proporcionar una [URL de arranque](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html) para el clúster.
+ **secrets\_manager\_secret**: el nombre del secreto de AWS en el que se guardan las credenciales. Este parámetro no es obligatorio para la autenticación de IAM.
+ **Parámetros de vertido**: las funciones de Lambda almacenan (“vierten”) temporalmente los datos que no caben en la memoria de Amazon S3. Todas las instancias de bases de datos a las que se accede mediante la misma función de Lambda se vierten en la misma ubicación. Use los parámetros de la siguiente tabla para especificar la ubicación de vertido.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-msk.html)

## Compatibilidad con tipos de datos
<a name="connectors-msk-data-type-support"></a>

En la siguiente tabla, se muestran los tipos de datos correspondientes compatibles con Kafka y Apache Arrow.


****  

| Kafka | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| TIMESTAMP | MILLISECOND | 
| DATE | DAY | 
| BOOLEANO | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 

## Particiones y divisiones
<a name="connectors-msk-partitions-and-splits"></a>

Los temas de Kafka se dividen en particiones. Cada partición está ordenada. Cada mensaje de una partición tiene un ID incremental denominado *desplazamiento*. Cada partición de Kafka se divide a su vez en múltiples divisiones para su procesamiento en paralelo. Los datos están disponibles durante el periodo de retención configurado en los clústeres de Kafka.

## Prácticas recomendadas
<a name="connectors-msk-best-practices"></a>

Como práctica recomendada, use la inserción de predicados cuando realice consultas en Athena, como en los siguientes ejemplos.

```
SELECT * 
FROM "{{msk_catalog_name}}"."{{glue_schema_registry_name}}"."{{glue_schema_name}}" 
WHERE integercol = 2147483647
```

```
SELECT * 
FROM "{{msk_catalog_name}}"."{{glue_schema_registry_name}}"."{{glue_schema_name}}" 
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Configuración del conector para MSK
<a name="connectors-msk-setup"></a>

Antes de poder usar el conector, debe configurar el clúster de Amazon MSK, usar [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir el esquema y configurar la autenticación del conector.

**nota**  
Si se implementa el conector en una VPC con el fin de acceder a recursos privados y también se desea conectar a un servicio de acceso público como Confluent, se debe asociar el conector a una subred privada que tenga una puerta de enlace NAT. Para obtener más información, consulte [Puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) en la Guía del usuario de Amazon VPC.

Cuando trabaje con AWS Glue Schema Registry, tenga en cuenta los siguientes puntos:
+ Asegúrese de que el texto del campo **Description** (Descripción) de AWS Glue Schema Registry incluya la cadena `{AthenaFederationMSK}`. Esta cadena de marcadores es obligatoria para los registros AWS Glue que use con el conector para MSK de Amazon Athena.
+ Para obtener el mejor rendimiento, use solo minúsculas en los nombres de las bases de datos y tablas. El uso combinado de mayúsculas y minúsculas hace que el conector realice una búsqueda que no distinga mayúsculas de minúsculas, lo que requiere un mayor esfuerzo computacional.

**Para configurar el entorno de Amazon MSK y AWS Glue Schema Registry**

1. Configure el entorno de Amazon MSK. Para obtener más información y conocer los pasos que se deben seguir, consulte [Configuración de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/before-you-begin.html) y [Empezar a utilizar Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

1. Cargue el archivo de descripción del tema de Kafka (es decir, su esquema) en formato JSON en AWS Glue Schema Registry. Para obtener más información, consulte [Integración con AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) en la Guía para desarrolladores de AWS Glue. Para obtener más esquemas de ejemplo, consulte la siguiente sección.

### Ejemplos de esquemas para AWS Glue Schema Registry
<a name="connectors-msk-setup-schema-examples"></a>

Use el formato de los ejemplos de esta sección cuando cargue el esquema en [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

#### Ejemplo de esquema de tipo JSON
<a name="connectors-msk-setup-schema-examples-json"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `json` como el valor de `dataFormat` y usa `datatypejson` para `topicName`.

**nota**  
El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka. 

```
{
  "topicName": "datatypejson",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "intcol",
        "mapping": "intcol",
        "type": "INTEGER"
      },
      {
        "name": "varcharcol",
        "mapping": "varcharcol",
        "type": "VARCHAR"
      },
      {
        "name": "booleancol",
        "mapping": "booleancol",
        "type": "BOOLEAN"
      },
      {
        "name": "bigintcol",
        "mapping": "bigintcol",
        "type": "BIGINT"
      },
      {
        "name": "doublecol",
        "mapping": "doublecol",
        "type": "DOUBLE"
      },
      {
        "name": "smallintcol",
        "mapping": "smallintcol",
        "type": "SMALLINT"
      },
      {
        "name": "tinyintcol",
        "mapping": "tinyintcol",
        "type": "TINYINT"
      },
      {
        "name": "datecol",
        "mapping": "datecol",
        "type": "DATE",
        "formatHint": "yyyy-MM-dd"
      },
      {
        "name": "timestampcol",
        "mapping": "timestampcol",
        "type": "TIMESTAMP",
        "formatHint": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    ]
  }
}
```

#### Ejemplo de esquema de tipo CSV
<a name="connectors-msk-setup-schema-examples-csv"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `csv` como el valor de `dataFormat` y usa `datatypecsvbulk` para `topicName`. El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka.

```
{
  "topicName": "datatypecsvbulk",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "intcol",
        "type": "INTEGER",
        "mapping": "0"
      },
      {
        "name": "varcharcol",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "booleancol",
        "type": "BOOLEAN",
        "mapping": "2"
      },
      {
        "name": "bigintcol",
        "type": "BIGINT",
        "mapping": "3"
      },
      {
        "name": "doublecol",
        "type": "DOUBLE",
        "mapping": "4"
      },
      {
        "name": "smallintcol",
        "type": "SMALLINT",
        "mapping": "5"
      },
      {
        "name": "tinyintcol",
        "type": "TINYINT",
        "mapping": "6"
      },
      {
        "name": "floatcol",
        "type": "DOUBLE",
        "mapping": "7"
      }
    ]
  }
}
```

### Configuración de la autenticación del conector de Athena MSK
<a name="connectors-msk-setup-configuring-authentication"></a>

Puede usar diversos métodos para autenticarse en su clúster de Amazon MSK, entre los que se incluyen IAM, SSL, SCRAM y Kafka independiente.

En la siguiente tabla, se muestran los tipos de autenticación del conector, el protocolo de seguridad y el mecanismo SASL de cada uno. Para obtener más información, consulte [Autenticación y autorización para las API de Apache Kafka](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.


****  

| auth\_type | security.protocol | sasl.mechanism | 
| --- | --- | --- | 
| SASL\_SSL\_PLAIN | SASL\_SSL | PLAIN | 
| SASL\_PLAINTEXT\_PLAIN | SASL\_PLAINTEXT | PLAIN | 
| SASL\_SSL\_AWS\_MSK\_IAM | SASL\_SSL | AWS\_MSK\_IAM | 
| SASL\_SSL\_SCRAM\_SHA512 | SASL\_SSL | SCRAM-SHA-512 | 
| SSL | SSL | N/A | 

**nota**  
Apache Kafka admite los tipos de autenticación `SASL_SSL_PLAIN` y `SASL_PLAINTEXT_PLAIN`; sin embargo, Amazon MSK no los admite.

#### SASL/IAM
<a name="connectors-msk-setup-configuring-authentication-sasl-iam"></a>

Si el clúster usa la autenticación de IAM, debe configurar la política de IAM para el usuario al configurar el clúster. Para obtener más información, consulte [Control de acceso de IAM](https://docs.aws.amazon.com/msk/latest/developerguide/IAM-access-control.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

Para usar este tipo de autenticación, establezca la variable de entorno `auth_type` de Lambda del conector como `SASL_SSL_AWS_MSK_IAM`. 

#### SSL
<a name="connectors-msk-setup-configuring-authentication-tls"></a>

Si el clúster se ha autenticado con SSL, debe generar los archivos del almacén de confianza y del almacén de claves y cargarlos en el bucket de Amazon S3. Debe proporcionar esta referencia de Amazon S3 al implementar el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. Debe proporcionar la clave secreta de AWS al implementar el conector.

Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar este tipo de autenticación, establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\_type | SSL | 
| certificates\_s3\_reference | La ubicación de Amazon S3 que contiene los certificados. | 
| secrets\_manager\_secret | El nombre de su clave secreta de AWS. | 

Después de crear un secreto en Secrets Manager, puede verlo en la consola de Secrets Manager.

**Para ver el secreto en Secrets Manager**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En el panel de navegación, elija **Secretos**.

1. En la página **Secretos**, elija el vínculo al secreto.

1. En la página de detalles del secreto, elija **Retrieve secret value** (Recuperar valor del secreto).

   La siguiente imagen muestra un secreto de ejemplo con tres pares de clave y valor: `keystore_password`, `truststore_password` y `ssl_key_password`.  
![Recuperación de un secreto de SSL en Secrets Manager](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-msk-setup-1.png)

#### SASL/SCRAM
<a name="connectors-msk-setup-configuring-authentication-sasl-scram"></a>

Si su clúster usa la autenticación con SCRAM, proporcione la clave de Secrets Manager que está asociada al clúster cuando implemente el conector. Las credenciales de AWS del usuario (clave secreta y clave de acceso) se usan para autenticarse en el clúster.

Establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\_type | SASL\_SSL\_SCRAM\_SHA512 | 
| secrets\_manager\_secret | El nombre de su clave secreta de AWS. | 

La siguiente imagen muestra un secreto de ejemplo en la consola de Secrets Manager con dos pares de clave y valor: uno para `username` y otro para `password`.

![Recuperación de un secreto de SCRAM en Secrets Manager](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-msk-setup-2.png)


## Información sobre licencias
<a name="connectors-msk-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-msk-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-msk) en GitHub.com.