

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

O conector do Amazon Athena para o [Amazon MSK](https://aws.amazon.com/msk/) possibilita que o Amazon Athena execute consultas SQL em seus tópicos do Apache Kafka. Use esse conector para visualizar os tópicos e as mensagens do [Apache Kafka](https://kafka.apache.org/) no Athena como tabelas e linhas, respectivamente. Para obter informações adicionais, consulte [Analyze real-time streaming data in Amazon MSK with Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-real-time-streaming-data-in-amazon-msk-with-amazon-athena/) (Analisar dados de streaming em tempo real no Amazon MSK com o Amazon Athena) no blog de big data da AWS.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-msk-prerequisites"></a>

Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-msk-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.
+ Os tipos de dados data e timestamp não são compatíveis com o tipo de arquivo CSV e são tratados como valores varchar.
+ Não há suporte para o mapeamento em campos JSON aninhados. O conector mapeia somente os campos de nível superior.
+ O conector não é compatível com tipos complexos. Tipos complexos são interpretados como strings.
+ Para extrair ou trabalhar com valores JSON complexos, use as funções relacionadas ao JSON disponíveis no Athena. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md).
+ O conector não oferece suporte ao acesso a metadados de mensagens do Kafka.

## Termos
<a name="connectors-msk-terms"></a>
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Endpoint do Kafka**: uma string de texto que estabelece uma conexão com uma instância do Kafka.

## Compatibilidade de cluster
<a name="connectors-msk-cluster-compatibility"></a>

O conector MSK pode ser usado com os seguintes tipos de cluster:
+ **Cluster provisionado pelo MSK**: você especifica, monitora e escala manualmente a capacidade do cluster.
+ **Cluster do MSK Serverless**: fornece uma capacidade sob demanda que é escalada automaticamente conforme a escalabilidade de E/S da aplicação.
+ **Kafka dedicado**: uma conexão direta com o Kafka (autenticada ou não autenticada).

## Métodos de autenticação compatíveis
<a name="connectors-msk-supported-authentication-methods"></a>

O conector é compatível com os métodos de autenticação a seguir.
+ [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\$1AUTH

  Para obter mais informações, consulte [Configuração da autenticação para o conector MSK do Athena](#connectors-msk-setup-configuring-authentication).

## Formatos de dados de entrada compatíveis
<a name="connectors-msk-supported-input-data-formats"></a>

O conector é compatível com os seguintes formatos de dados de entrada:
+ JSON
+ CSV

## Parâmetros
<a name="connectors-msk-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do MSK para o Athena.
+ **auth\$1type**: especifica o tipo de autenticação do cluster. O conector é compatível com os tipos de autenticação a seguir:
  + **NO\$1AUTH**: conexão direta ao Kafka sem autenticação (por exemplo, um cluster do Kafka implantado em uma instância do EC2 que não usa autenticação).
  + **SASL\$1SSL\$1PLAIN**: esse método usa o protocolo de segurança `SASL_SSL` e o mecanismo SASL `PLAIN`.
  + **SASL\$1PLAINTEXT\$1PLAIN**: esse método usa o protocolo de segurança `SASL_PLAINTEXT` e o mecanismo SASL `PLAIN`.
**nota**  
Os tipos de autenticação `SASL_SSL_PLAIN` e `SASL_PLAINTEXT_PLAIN` são compatíveis com o Apache Kafka, mas não no Amazon MSK.
  + **SASL\$1SSL\$1AWS\$1MSK\$1IAM**: o controle de acesso do IAM para o Amazon MSK permite que você gerencie a autenticação e a autorização para o cluster do MSK. As credenciais da AWS do seu usuário (chave secreta e chave de acesso) serão usadas para se conectar ao cluster. Para obter mais informações, consulte [IAM access control](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) (Controle de acesso do IAM) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
  + **SASL\$1SSL\$1SCRAM\$1SHA512**: você pode usar esse tipo de autenticação para controlar o acesso aos seus clusters do Amazon MSK. Esse método armazena o nome do usuário e a senha no AWS Secrets Manager. O segredo deve estar associado ao cluster do Amazon MSK. Para obter mais informações, consulte [Setting up SASL/SCRAM authentication for an Amazon MSK cluster](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) (Configuração da autenticação SASL/SCRAM para um cluster do Amazon MSK) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
  + **SSL**: a autenticação SSL usa os arquivos de armazenamento de chaves e de armazenamento confiável para se conectar ao cluster do Amazon MSK. Você deve gerar os arquivos de armazenamento confiável e de armazenamento de chaves, carregá-los em um bucket do Amazon S3 e fornecer a referência ao Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Seu cliente deve fornecer a chave secreta da AWS ao implantar o conector. Para obter mais informações, consulte [Mutual TLS authentication](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) (Autenticação mútua TLS) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

    Para obter mais informações, consulte [Configuração da autenticação para o conector MSK do Athena](#connectors-msk-setup-configuring-authentication).
+ **certificates\$1s3\$1reference**: o local do Amazon S3 que contém os certificados (os arquivos de armazenamento de chaves e de armazenamento confiável).
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\$1endpoint**: os detalhes do endpoint a serem fornecidos para o Kafka. Por exemplo, para um cluster do Amazon MSK, você fornece um [URL de inicialização](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html) para o cluster.
+ **secrets\$1manager\$1secret**: o nome do segredo da AWS no qual as credenciais são salvas. Esse parâmetro não é necessário para a autenticação do IAM.
+ **Parâmetros de vazamento**: as funções do Lambda armazenam temporariamente dados (“de vazamentos”) que não cabem na memória do Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local. Use os parâmetros na tabela a seguir para especificar o local do vazamento.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-msk.html)

## Suporte ao tipo de dados
<a name="connectors-msk-data-type-support"></a>

A tabela a seguir apresenta os tipos de dados correspondentes compatíveis com o Kafka e o Apache Arrow.


****  

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

## Partições e divisões
<a name="connectors-msk-partitions-and-splits"></a>

Os tópicos do Kafka são divididos em partições. Cada partição é ordenada. Cada mensagem em uma partição tem um ID incremental denominado *deslocamento*. Cada partição do Kafka é separada em diversas divisões para o processamento paralelo. Os dados estão disponíveis para o período de retenção configurado nos clusters do Kafka.

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

Como prática recomendada, use o empilhamento de predicados ao consultar o Athena, como mostrado nos exemplos a seguir.

```
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'
```

## Configuração do conector MSK
<a name="connectors-msk-setup"></a>

Antes de usar o conector, você deve configurar seu cluster do Amazon MSK. Use o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir seu esquema e configurar a autenticação para o conector.

**nota**  
Se você implantar o conector em uma VPC para acessar recursos privados e também quiser estabelecer uma conexão com um serviço acessível ao público, como o Confluent, deverá associar o conector a uma sub-rede privada que tenha um gateway NAT. Para obter mais informações, consulte [Gateways NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) no Guia do usuário da Amazon VPC.

Ao trabalhar com o registro de esquemas do AWS Glue, preste atenção aos seguintes pontos:
+ Certifique-se de que o texto no campo **Description** (Descrição) do registro de esquemas do AWS Glue inclua a string `{AthenaFederationMSK}`. Essa string de marcação é necessária para os registros do AWS Glue usados com o conector MSK do Amazon Athena.
+ Para obter a melhor performance, use somente letras minúsculas para nomes de banco de dados e nomes de tabela. O uso de maiúsculas e minúsculas mistas faz com que o conector execute uma pesquisa que não diferencia maiúsculas de minúsculas e é mais computacionalmente intensiva.

**Para configurar o ambiente do Amazon MSK e o registro de esquemas do AWS Glue**

1. Configure o ambiente do Amazon MSK. Para obter mais informações e etapas, consulte [Setting up Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/before-you-begin.html) (Configuração do Amazon MSK) e [Getting started using Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) (Comece a usar o Amazon MSK) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

1. Faça o upload do arquivo de descrição do tópico do Kafka (ou seja, seu esquema) no formato JSON para o registro de esquemas do AWS Glue. Para obter mais informações, consulte [Integração com o registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) no Guia do desenvolvedor do AWS Glue. Para obter esquemas de exemplo, consulte a seção a seguir.

### Exemplos de esquema para o registro de esquemas do AWS Glue
<a name="connectors-msk-setup-schema-examples"></a>

Use o formato dos exemplos apresentados nessa seção ao fazer upload de seu esquema para o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

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

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `json` como o valor para `dataFormat` e usa `datatypejson` para `topicName`.

**nota**  
O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no 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"
      }
    ]
  }
}
```

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

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `csv` como o valor para `dataFormat` e usa `datatypecsvbulk` para `topicName`. O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no 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"
      }
    ]
  }
}
```

### Configuração da autenticação para o conector MSK do Athena
<a name="connectors-msk-setup-configuring-authentication"></a>

É possível usar uma variedade de métodos para autenticar seu cluster do Amazon MSK, incluindo IAM, SSL, SCRAM e Kafka dedicado.

A tabela a seguir mostra os tipos de autenticação para o conector, e o protocolo de segurança e o mecanismo SASL para cada um. Para obter mais informações, consulte [Authentication and authorization for Apache Kafka APIs](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) (Autenticação e autorização para APIs do Apache Kafka) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.


****  

| auth\$1type | security.protocol | sasl.mechanism | 
| --- | --- | --- | 
| SASL\$1SSL\$1PLAIN | SASL\$1SSL | PLAIN | 
| SASL\$1PLAINTEXT\$1PLAIN | SASL\$1PLAINTEXT | PLAIN | 
| SASL\$1SSL\$1AWS\$1MSK\$1IAM | SASL\$1SSL | AWS\$1MSK\$1IAM | 
| SASL\$1SSL\$1SCRAM\$1SHA512 | SASL\$1SSL | SCRAM-SHA-512 | 
| SSL | SSL | N/D | 

**nota**  
Há suporte para os tipos de autenticação `SASL_SSL_PLAIN` e `SASL_PLAINTEXT_PLAIN` no Apache Kafka, mas não no Amazon MSK.

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

Se o cluster usar a autenticação do IAM, você deverá configurar a política do IAM para o usuário ao configurar o cluster. Para obter mais informações, consulte [IAM access control](https://docs.aws.amazon.com/msk/latest/developerguide/IAM-access-control.html) (Controle de acesso do IAM) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

Para usar esse tipo de autenticação, defina a variável de ambiente do Lambda `auth_type` como `SASL_SSL_AWS_MSK_IAM` para o conector. 

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

Se o cluster for autenticado por SSL, você deverá gerar os arquivos de armazenamento confiável e de armazenamento de chaves, e fazer o upload deles no bucket do Amazon S3. Você deverá fornecer essa referência do Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Você fornecerá a chave secreta da AWS ao implantar o conector.

Para obter informações sobre como criar um segredo no Secrets Manager, consulte [Criação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar esse tipo de autenticação, defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SSL | 
| certificates\$1s3\$1reference | O local do Amazon S3 que contém os certificados. | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

Após a criação de um segredo no Secrets Manager, é possível visualizá-lo no console do Secrets Manager.

**Para visualizar o segredo no Secrets Manager**

1. Abra o console do Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. No painel de navegação, escolha **Secrets** (Segredos).

1. Na página **Secrets** (Segredos), selecione o link do seu segredo.

1. Na página de detalhes do seu segredo, escolha **Retrieve secret value** (Recuperar valor do segredo).

   A imagem a seguir apresenta um exemplo de segredo com três pares chave/valor: `keystore_password`, `truststore_password` e `ssl_key_password`.  
![\[Recuperação de um segredo SSL no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-msk-setup-1.png)

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

Se o cluster usar a autenticação SCRAM, forneça a chave do Secrets Manager associada ao cluster ao implantar o conector. As credenciais da AWS do usuário (chave secreta e chave de acesso) serão usadas para realizar a autenticação com o cluster.

Defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SASL\$1SSL\$1SCRAM\$1SHA512 | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

A imagem a seguir apresenta um exemplo de segredo no console do Secrets Manager com dois pares chave/valor: um para `username` e outro para `password`.

![\[Recuperação de um segredo SCRAM no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-msk-setup-2.png)


## Informações de licença
<a name="connectors-msk-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/LICENSE.txt) em GitHub.com.

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

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-msk) em GitHub.com.