

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Otimizar os produtores do Kinesis Data Streams
<a name="advanced-producers"></a>

Você pode otimizar ainda mais seus produtores do Amazon Kinesis Data Streams dependendo do comportamento específico observado. Leia os seguintes tópicos para identificar soluções.

**Topics**
+ [Personalize o comportamento de limites de taxas e novas tentativas da KPL](kinesis-producer-adv-retries-rate-limiting.md)
+ [Aplique as práticas recomendadas à agregação da KPL](kinesis-producer-adv-aggregation.md)

# Personalize o comportamento de limites de taxas e novas tentativas da KPL
<a name="kinesis-producer-adv-retries-rate-limiting"></a>

Ao adicionar registros de usuário do Amazon Kinesis Producer Library (KPL) usando a operação `addUserRecord()` da KPL, o registro recebe um carimbo de data e hora e é adicionado a um buffer com um prazo definido pelo parâmetro de configuração `RecordMaxBufferedTime`. Essa stamp/deadline combinação de tempo define a prioridade do buffer. Os registros são descarregados do buffer com base nos seguintes critérios:
+ Prioridade do buffer
+ Configuração de agregação
+ Configuração de coleta

Os parâmetros de configuração de coleta e agregação que afetam o comportamento do buffer são os seguintes:
+ `AggregationMaxCount`
+ `AggregationMaxSize`
+ `CollectionMaxCount`
+ `CollectionMaxSize`

Em seguida, os registros descarregados são enviados para o fluxo de dados do Kinesis como registros do Amazon Kinesis Data Streams usando uma chamada para a operação `PutRecords` de API do Kinesis Data Streams. A operação `PutRecords` envia solicitações ao fluxo que ocasionalmente apresenta falhas parciais ou totais. Os registros com falha são automaticamente adicionados de volta ao buffer da KPL. O novo prazo é definido com base no mínimo destes dois valores: 
+ Metade da configuração de `RecordMaxBufferedTime` atual
+ O time-to-live valor do registro

Essa estratégia permite que registros repetidos de usuários do KPL sejam incluídos nas chamadas subsequentes da API do Kinesis Data Streams, para melhorar a taxa de transferência e reduzir a complexidade, ao mesmo tempo em que reforça o valor do registro do Kinesis Data Streams. time-to-live Não há um algoritmo de espera, tornando essa uma estratégia de tentativa relativamente agressiva. O spam devido ao excesso de tentativas é evitado pela limitação de taxas, discutida na próxima seção.

## Limitação de intervalo
<a name="kinesis-producer-adv-retries-rate-limiting-rate-limit"></a>

A KPL inclui um recurso de limitação de taxas, que limita o throughput por fragmento enviado de um único produtor. A limitação de taxas é implementada usando um algoritmo de bucket de token com buckets separados para bytes e registros do Kinesis Data Streams. Cada gravação bem-sucedida em um fluxo de dados do Kinesis adiciona um token (ou vários tokens) a cada bucket, até um determinado limite. Esse limite é configurável, mas por padrão é definido como 50% maior que o limite de fragmento real, para permitir a saturação de fragmentos a partir de um único produtor. 

É possível reduzir esse limite para diminuir o spam devido ao excesso de tentativas. No entanto, a melhor prática é que cada produtor tente novamente para um throughput máximo de maneira agressiva e lide com qualquer limitação resultante determinada como excessiva por meio da expansão da capacidade do fluxo e da implementação de uma estratégia de chave de partição apropriada.

# Aplique as práticas recomendadas à agregação da KPL
<a name="kinesis-producer-adv-aggregation"></a>

Embora o esquema do número de sequência dos registros resultantes do Amazon Kinesis Data Streams permaneça o mesmo, a agregação faz com que a indexação dos registros de usuários do Amazon Kinesis Producer Library (KPL) contidos em um registro agregado do Kinesis Data Streams comece de 0 (zero). No entanto, desde que não haja dependência dos números de sequência para identificar exclusivamente os registros de usuários da KPL, o código poderá ignorar isso, já que a agregação (de registros de usuários da KPL em um registro do Kinesis Data Streams) e a desagregação subsequente (de um registro do Kinesis Data Streams em registros de usuários da KPL) cuidam disso automaticamente para você. Isso se aplica se seu consumidor estiver usando o KCL ou o AWS SDK. Para usar essa funcionalidade de agregação, você precisará inserir a parte Java do KPL em sua compilação se seu consumidor for escrito usando a API fornecida no AWS SDK.

Se quiser usar números de sequência como identificadores exclusivos dos registros de usuários da KPL, recomendamos que use as operações `public int hashCode()` e `public boolean equals(Object obj)`, que respeitam contratos, fornecidas em `Record` e `UserRecord` para habilitar a comparação desses registros. Além disso, para examinar o número subsequente do registro de usuários da KPL, é possível convertê-lo em uma instância de `UserRecord` e recuperar o número de subsequência.

Para obter mais informações, consulte [Implementar a desagregação de consumidores](kinesis-kpl-consumer-deaggregation.md).