Migrar da KCL 2.x para a KCL 3.x - Amazon Kinesis Data Streams

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

Migrar da KCL 2.x para a KCL 3.x

Este tópico fornece step-by-step instruções para migrar seu consumidor do KCL 2.x para o KCL 3.x. A KCL 3.x oferece suporte à migração local de consumidores da KCL 2.x. Você pode continuar consumindo os dados do seu fluxo de dados do Kinesis enquanto migra seus operadores de forma contínua.

Importante

A KCL 3.x mantém as mesmas interfaces e métodos da KCL 2.x. Portanto, você não precisa atualizar seu código de processamento de registros durante a migração. No entanto, é necessário definir a configuração adequada e verificar as etapas necessárias para a migração. É altamente recomendável que você siga as etapas de migração a seguir para uma experiência de migração perfeita.

Etapa 1: pré-requisitos

Antes de começar a usar a KCL 3.x, certifique-se de ter os pré-requisitos apresentados a seguir:

  • Java Development Kit (JDK) 8 ou posterior

  • AWS SDK para Java2. x

  • Maven ou Gradle para gerenciamento de dependências

Importante

Não use as AWS SDK para Java versões 2.27.19 a 2.27.23 com KCL 3.x. Essas versões têm um problema que causa um erro de exceção relacionado ao uso do DynamoDB da KCL. Recomendamos que você use a AWS SDK para Java versão 2.28.0 ou posterior para evitar esse problema.

Etapa 2: adicionar dependências

Se estiver usando Maven, adicione a dependência a seguir ao seu arquivo pom.xml. Certifique-se de ter substituído 3.x.x pela versão mais recente da KCL.

<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>

Se você estiver usando Gradle, adicione o seguinte ao seu arquivo build.gradle. Certifique-se de ter substituído 3.x.x pela versão mais recente da KCL.

implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'

A versão mais recente da KCL pode ser obtida no Repositório central do Maven.

Etapa 3: definir a configuração relacionada à migração

Para migrar da KCL 2.x para a KCL 3.x, é necessário definir o seguinte parâmetro de configuração:

  • CoordinatorConfig. clientVersionConfig: essa configuração determina em qual modo de compatibilidade de versão do KCL o aplicativo será executado. Ao migrar da KCL 2.x para a 3.x, você precisa definir essa configuração como CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X. Para definir a configuração, adicione a seguinte linha ao criar seu objeto do agendador:

configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X)

Veja a seguir um exemplo de como configurar CoordinatorConfig.clientVersionConfig para migrar da KCL 2.x para a 3.x. Você pode ajustar outras configurações conforme necessário, com base em seus requisitos específicos:

Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );

É importante que todos os operadores em sua aplicação de consumo usem o mesmo algoritmo de balanceamento de carga em um determinado momento, uma vez que a KCL 2.x e a 3.x usam algoritmos diferentes para balancear a carga. A execução de operadores com diferentes algoritmos de balanceamento de carga pode causar uma distribuição de carga abaixo do ideal, pois os dois algoritmos operam de forma independente.

Essa configuração de compatibilidade da KCL 2.x permite que sua aplicação da KCL 3.x seja executada em um modo compatível com a KCL 2.x e use o algoritmo de balanceamento de carga para a KCL 2.x até que todos os operadores da sua aplicação de consumo tenham sido atualizados para a KCL 3.x. Quando a migração for concluída, a KCL mudará automaticamente para o modo de funcionalidade completa da KCL 3.x e começará a usar o novo algoritmo de balanceamento de carga da KCL 3.x para todos os operadores em execução.

Importante

Se você não estiver usando ConfigsBuilder, mas criar um objeto LeaseManagementConfig para definir as configurações, será preciso adicionar mais um parâmetro chamado applicationName na versão 3.x ou posterior da KCL. Para obter detalhes, consulte Erro de compilação com o LeaseManagementConfig construtor. Recomendamos usar ConfigsBuilder para definir as configurações da KCL. ConfigsBuilder fornece uma maneira mais flexível e sustentável de configurar sua aplicação da KCL.

Etapa 4: siga as melhores práticas para a implementação do método shutdownRequested()

A KCL 3.x introduz um atributo chamado transferência normal de concessões para minimizar o reprocessamento de dados quando uma concessão é transferida para outro operador como parte do processo de reatribuição da concessão. Isso é obtido mediante verificação do último número de sequência processado na tabela de concessões antes da transferência da concessão. Para garantir que a transferência normal da concessão funcione corretamente, o objeto checkpointer tem de ser invocado dentro do método shutdownRequested em sua classe RecordProcessor. Se você invocar o objeto checkpointer dentro do método shutdownRequested, poderá implementá-lo conforme ilustrado no exemplo a seguir.

Importante
  • O exemplo de implementação a seguir é um requisito mínimo para uma transferência de concessão normal. Você pode estendê-la para incluir lógica adicional relacionada à verificação, se necessário. Se você estiver executando processamento assíncrono, assegure que todos os registros entregues ao downstream tenham sido processados antes de invocar a verificação.

  • Embora a transferência normal da concessão reduza significativamente a probabilidade de reprocessamento de dados durante as transferências de concessão, ela não elimina totalmente essa possibilidade. Para preservar a integridade e a consistência dos dados, projete suas aplicações de consumo downstream como idempotentes. Isso significa que elas devem ser capazes de lidar com o possível processamento de registros duplicados sem efeitos adversos no sistema geral.

/** * Invoked when either Scheduler has been requested to gracefully shutdown * or lease ownership is being transferred gracefully so the current owner * gets one last chance to checkpoint. * * Checkpoints and logs the data a final time. * * @param shutdownRequestedInput Provides access to a checkpointer, allowing a record processor to checkpoint * before the shutdown is completed. */ public void shutdownRequested(ShutdownRequestedInput shutdownRequestedInput) { try { // Ensure that all delivered records are processed // and has been successfully flushed to the downstream before calling // checkpoint // If you are performing any asynchronous processing or flushing to // downstream, you must wait for its completion before invoking // the below checkpoint method. log.info("Scheduler is shutting down, checkpointing."); shutdownRequestedInput.checkpointer().checkpoint(); } catch (ShutdownException | InvalidStateException e) { log.error("Exception while checkpointing at requested shutdown. Giving up.", e); } }

Etapa 5: verifique os pré-requisitos da KCL 3.x para coletar métricas de operadores

A KCL 3.x coleta métricas de utilização da CPU, como a utilização da CPU pelos operadores, para equilibrar uniformemente a carga entre os operadores. Os operadores de aplicativos para consumidores podem trabalhar na Amazon EC2, Amazon ECS, Amazon EKS ouAWS Fargate. A KCL 3.x pode coletar métricas de utilização da CPU dos operadores somente quando os seguintes pré-requisitos forem atendidos:

Amazon Elastic Compute Cloud(Amazon EC2)

  • Seu sistema operacional deve ser Linux OS.

  • Você deve habilitar IMDSv2em sua EC2 instância.

Amazon Elastic Container Service (Amazon ECS) na Amazon EC2

Amazon ECS em AWS Fargate

Amazon Elastic Kubernetes Service (Amazon EKS) na Amazon EC2

  • Seu sistema operacional deve ser Linux OS.

Amazon EKS em AWS Fargate

  • Plataforma 1.3.0 ou posterior do Fargate.

Importante

Se a KCL 3.x não puder coletar as métricas de utilização da CPU dos operadores porque os pré-requisitos não foram atendidos, ela reequilibrará a carga e o nível de throughput por concessão. Esse mecanismo de rebalanceamento alternativo garante que todos os operadores obtenham níveis de throughput total semelhantes das concessões atribuídas a cada operador. Para obter mais informações, consulte Como a KCL atribui concessões aos operadores e equilibra a carga.

Etapa 6: atualizar as permissões do IAM para a KCL 3.x

É necessário adicionar as permissões a seguir para o perfil do IAM ou a política associada à aplicação de consumo da KCL 3.x. Isso inclui a atualização da política do IAM atual, usada pela aplicação da KCL. Para obter mais informações, consulte Permissões do IAM necessárias para aplicativos de consumo da KCL.

Importante

Seus aplicativos da KCL atuais podem não ter as seguintes ações e recursos do IAM adicionados à política do IAM porque não eram necessários na KCL 2.x. Verifique se você os adicionou antes de executar a aplicação da KCL 3.x.

  • Ações: UpdateTable

    • Recursos (ARNs): arn:aws:dynamodb:region:account:table/KCLApplicationName

  • Ações: Query

    • Recursos (ARNs): arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*

  • Ações: CreateTableDescribeTable,,Scan,GetItem,PutItem,UpdateItem, DeleteItem

    • Recursos (ARNs):arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats, arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState

    Substitua “região”, “conta” e “KCLApplicationNome” no ARNs por seu próprio Região da AWS Conta da AWS número e nome do aplicativo KCL, respectivamente. Se você usar as configurações para personalizar os nomes das tabelas de metadados criadas pela KCL, use esses nomes de tabela especificados em vez do nome da aplicação da KCL.

Etapa 7: implantar o código da KCL 3.x em seus operadores

Depois de definir a configuração necessária para a migração e concluir todas as listas de verificação de migração anteriores, você pode criar e implantar seu código para seus operadores.

nota

Se você ver um erro de compilação com o LeaseManagementConfig construtor, consulte Erro de compilação com o LeaseManagementConfig construtor para obter informações sobre solução de problemas.

Etapa 8: concluir a migração

Durante a implantação do código da KCL 3.x, a KCL continua usando o algoritmo de atribuição de concessões da KCL 2.x. Após a implantação do código da KCL 3.x em todos os seus operadores, a KCL detectará isso automaticamente e passará a adotar o novo algoritmo de atribuição de concessões com base na utilização de recursos pelos operadores. Para obter mais detalhes sobre o novo algoritmo de atribuição de concessões, consulte Como a KCL atribui concessões aos operadores e equilibra a carga.

Durante a implantação, você pode monitorar o processo de migração com as seguintes métricas emitidas para o. CloudWatch É possível monitorar métricas na operação de Migration. Todas as métricas são per-KCL-application métricas e são definidas para o nível SUMMARY métrico. Se a estatística Sum da métrica CurrentState:3xWorker corresponder ao número total de operadores em sua aplicação da KCL, a migração para KCL 3.x foi concluída com êxito.

Importante

A KCL leva pelo menos 10 minutos para mudar para o novo algoritmo de atribuição de concessões depois que todos os operadores estiverem prontos para executá-lo.

CloudWatch métricas para o processo de migração da KCL
Metrics Description
CurrentState:3xWorker

Número de operadores da KCL migrados para a KCL 3.x e que executam o novo algoritmo de atribuição de concessões. Se a contagem Sum dessa métrica corresponder ao número total de seus operadores, a migração para a KCL 3.x foi concluída com êxito.

  • Nível de métrica: resumo

  • Unidades: contagem

  • Estatísticas: A estatística mais útil é Sum

CurrentState:2xCompatibleWorker

Número de operadores da KCL sendo executados no modo compatível com KCL 2.x durante o processo de migração. Um valor diferente de zero para essa métrica indica que a migração ainda está em andamento.

  • Nível de métrica: resumo

  • Unidades: contagem

  • Estatísticas: A estatística mais útil é Sum

Fault

Número de exceções encontradas durante o processo de migração. A maioria dessas exceções é composta por erros transitórios e a KCL 3.x tentará automaticamente concluir a migração novamente. Caso haja um valor métrico Fault persistente, revise seus logs do período de migração para solucionar o problema. Se o problema persistir, entre em contatoSuporte.

  • Nível de métrica: resumo

  • Unidades: contagem

  • Estatísticas: A estatística mais útil é Sum

GsiStatusReady

Status da criação do índice secundário global (GSI) na tabela de concessões. Essa métrica indica se o GSI na tabela de concessões foi criado, pois isso é um pré-requisito para executar a KCL 3.x. O valor é 0 ou 1, com 1 indicando que a criação foi realizada. Durante um estado de reversão, essa métrica não será emitida. Depois de avançar novamente, você pode continuar a monitorar essa métrica.

  • Nível de métrica: resumo

  • Unidades: contagem

  • Estatísticas: A estatística mais útil é Sum

workerMetricsReady

Status da emissão de métricas de todos os operadores. As métricas indicam se todos os operadores estão emitindo métricas como, por exemplo, a utilização da CPU. O valor é 0 ou 1, com 1 indicando que todos os operadores estão emitindo métricas e estão prontos para o novo algoritmo de atribuição de concessões. Durante um estado de reversão, essa métrica não será emitida. Depois de avançar novamente, você pode continuar a monitorar essa métrica.

  • Nível de métrica: resumo

  • Unidades: contagem

  • Estatísticas: A estatística mais útil é Sum

O KCL fornece capacidade de reversão para o modo compatível com 2.x durante a migração. Depois que a migração para a KCL 3.x for concluída, recomendamos que você remova a configuração CoordinatorConfig.clientVersionConfig de CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X se a reversão não for mais necessária. A remoção dessa configuração interrompe a emissão de métricas relacionadas à migração da aplicação da KCL.

nota

Recomendamos que você monitore o desempenho e a estabilidade da sua aplicação por um período durante a migração e após a conclusão da migração. Se houver um problema, você poderá fazer a reversão para que os operadores usem a funcionalidade compatível com a KCL 2.x por meio da Ferramenta de migração da KCL.