Dados em streaming

Desenvolvendo Aplicações na AWS

Ricardo Sueiras

Principal Technologist

Fundamentos de dados em streaming

 

dados em streaming

  • Registros processados continuamente à medida que chegam.
  • Produtores escrevem em um stream.
  • Consumidores leem de forma independente e em paralelo.
  • Absorve picos de tráfego sem esperar por lotes.
Desenvolvendo Aplicações na AWS

Do que são feitos os dados em streaming?

 

componentes de sistema de streaming

  • Produtores: aplicativos que emitem registros.
  • Streams: buffers duráveis e ordenados que desacoplam produtores de consumidores.
  • Consumidores: aplicativos que leem e processam registros.
  • Armazenamento e retenção: definem por quanto tempo os registros ficam disponíveis para replay.
Desenvolvendo Aplicações na AWS

Shards

 

shards

 

  • Shards são unidades de throughput e processamento paralelo.
  • Chaves de partição distribuem registros entre shards.
  • A ordem é garantida apenas dentro de um shard.
  • Consumidores usam checkpointing para acompanhar o progresso e se recuperar de falhas.
Desenvolvendo Aplicações na AWS

Serviços gerenciados da AWS para streaming de dados

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Blocos fundamentais para apps de dados em streaming.

 

serviços da aws

Desenvolvendo Aplicações na AWS

Kinesis Data Streams

  • Streaming de baixa latência.
  • Retenção configurável: 24 horas (padrão) até 365 dias.
  • Streams duráveis e reproduzíveis.
  • Vários consumidores podem ler em paralelo.
  • Desenvolvedores gerenciam escala usando shards.

 

kinesis data streams

Desenvolvendo Aplicações na AWS

Quando usar Kinesis Data Streams

  • Escolha quando precisar de latência em tempo real.
  • Você precisa reproduzir registros.
  • Você tem vários consumidores independentes.
  • Você precisa de lógica de transformação customizada.

 

kinesis data streams

Desenvolvendo Aplicações na AWS

Gravando registros

 

bibliotecas de cliente

  • Chaves de partição controlam alocação e ordenação por shard.
  • PutRecords envia em lote até 500 registros ou 5 MB por requisição.
  • Falhas são informadas por registro.
  • FailedRecordCount ajuda a identificar registros com falha.
Desenvolvendo Aplicações na AWS

Consumindo registros: clássico

 

clássico

 

  • Consumidores fazem polling sob demanda no Kinesis API.
  • Limites de escrita: 1 MB/s ou 1.000 registros/s.
  • Limites de leitura: 2 MB/s ou 5 chamadas GetRecords/s.
Desenvolvendo Aplicações na AWS

Consumindo registros: início do stream

 

início do stream

  • Consumidores especificam onde começar a leitura no stream.
  • TRIM_HORIZON: registro mais antigo disponível no shard.
  • LATEST: o próximo novo registro.
  • AT_SEQUENCE_NUMBER ou AFTER_SEQUENCE_NUMBER: de um número de sequência específico.
  • AT_TIMESTAMP: no ou após um timestamp especificado.
Desenvolvendo Aplicações na AWS

Consumindo registros: enhanced fan-out

  • Cada consumidor registrado ganha 2 MB/s dedicados por shard.
  • Registros são entregues via push HTTP/2.
  • Use quando vários consumidores independentes precisam de baixa latência.
  • E também de alto throughput no mesmo stream.

 

padrão - enhanced fan-out

Desenvolvendo Aplicações na AWS

Mapeamento de fonte de eventos do Lambda

  • Lambda faz polling do Kinesis e invoca em lotes.
  • BatchSize e MaximumBatchingWindow definem o formato do lote.
  • ParallelizationFactor: execuções concorrentes por shard.
  • BisectBatchOnFunctionError: divide lote com falha para isolar registros problemáticos.
  • ReportBatchItemFailures: evita retentar registros já bem-sucedidos.
  • OnFailure: envia lotes não processáveis para uma DLQ do SQS ou SNS.

 

mapeamento de fonte de eventos do lambda

Desenvolvendo Aplicações na AWS

Data Firehose

  • Serviço gerenciado que entrega dados em streaming a destinos.
  • Alvos incluem Amazon S3, Redshift e endpoints HTTP.
  • Suporta buffer, conversão de formato e transformações com Lambda.
  • Maior latência, buffer de segundos a minutos.
  • Sem replay ou retenção de longo prazo.
  • Ótimo para simplesmente enviar dados ao destino.

 

data firehose

Desenvolvendo Aplicações na AWS

Padrão: hot-cold

 

padrão - quente/frio

 

  • O padrão hot-cold combina Data Streams e Data Firehose.
  • Data Streams habilita processamento em tempo real para produtores.
  • Firehose arquiva registros da mesma fonte no S3.
Desenvolvendo Aplicações na AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Use Kinesis para streams ordenados e reproduzíveis com múltiplos consumidores.
  • Kinesis é ideal para dados de séries temporais e ordenados.
  • Use SQS para distribuição de tarefas.
Desenvolvendo Aplicações na AWS

Escalando dados em streaming

 

escalabilidade

  • Data streams são divididos em shards.
  • Chaves de partição roteiam registros para um shard específico.
  • A mesma chave sempre cai no mesmo shard, preservando a ordem.
  • Distribuição desigual gera shards quentes.
  • Mitigue com chaves de alta cardinalidade.
  • Faça reshard para escalar para fora ou para dentro.
Desenvolvendo Aplicações na AWS

Modos de capacidade: provisionado

  • Dois modos de capacidade estão disponíveis.
  • Modo provisionado usa contagem fixa de shards, gerenciada manualmente.
  • Fornece custo e capacidade previsíveis.
  • Requer monitoramento para evitar throttling e superprovisionamento.

 

modos de capacidade

Desenvolvendo Aplicações na AWS

Modos de capacidade: sob demanda

  • Modo sob demanda escala automaticamente conforme o tráfego.
  • Sem gerenciamento manual de shards.
  • Simplifica operações para cargas imprevisíveis.
  • Custo maior sob tráfego pesado sustentado.

 

modos de capacidade

Desenvolvendo Aplicações na AWS

Kinesis Producer Library (KPL)

  • Bibliotecas da AWS facilitam criar produtores e consumidores escaláveis.
  • A Kinesis Producer Library (KPL) cria lotes e agrega registros.
  • Também comprime registros e faz retries em caso de falha.
  • Faz buffer assíncrono para maximizar o throughput do produtor.

 

bibliotecas de cliente

Desenvolvendo Aplicações na AWS

Kinesis Consumer Library (KCL)

 

bibliotecas de cliente

 

  • A Kinesis Consumer Library (KCL) cuida da coordenação de shards.
  • Gerencia leasing de workers e checkpointing.
  • O estado é armazenado em uma tabela do DynamoDB.
  • Consumidores usam esse estado para saber de onde retomar.
Desenvolvendo Aplicações na AWS

Tratamento de falhas: idempotência

 

tratando falhas

 

  • Kinesis entrega pelo menos uma vez, então podem ocorrer duplicatas.
  • Projete consumidores idempotentes.
  • Deduplica usando o número de sequência ou uma chave de negócio no DynamoDB.
  • Consumidores podem reler registros retidos por número de sequência ou timestamp.
Desenvolvendo Aplicações na AWS

Tratamento de falhas: erros de throughput

 

tratando falhas

 

  • ProvisionedThroughputExceededException sinaliza throttling.
  • Resolva aumentando a contagem de shards.
  • Melhore a distribuição das chaves de partição.
  • Retente com backoff.
  • Troque o modo de capacidade.
Desenvolvendo Aplicações na AWS
  • Acompanhe IncomingBytes e IncomingRecords no CloudWatch.
  • Observe WriteProvisionedThroughputExceeded para throttling.
  • Atraso do consumidor ocorre quando lê mais lento que a produção.
  • Acompanhe GetRecords.IteratorAgeMilliseconds: idade alta indica atraso.

 

log e monitoramento

Desenvolvendo Aplicações na AWS

Segurança

  • Criptografia no servidor em repouso usando AWS KMS.
  • Criptografia em trânsito usando TLS.
  • Políticas do IAM controlam o acesso.

 

segurança

Desenvolvendo Aplicações na AWS

Vamos praticar!

Desenvolvendo Aplicações na AWS

Preparing Video For Download...