Use refragmentação, escalonamento e processamento paralelo para alterar o número de fragmentos
A refragmentação permite aumentar ou diminuir o número de fragmentos em um fluxo para se adaptar às alterações na taxa de dados que fluem pelo fluxo. A refragmentação costuma ser realizado por um aplicativo administrativo que monitora as métricas de tratamento de dados de fragmento. Embora não inicie operações de refragmentação, a KCL é projetada para se adaptar às alterações no número de fragmentos resultantes desse processo.
Conforme observado em Usar uma tabela de concessões para monitorar os fragmentos processados pela aplicação de consumo da KCL, a KCL rastreia os fragmentos no fluxo usando uma tabela do Amazon DynamoDB. Quando novos fragmentos são criados em consequência da refragmentação, a KCL descobre os novos fragmentos e preenche novas linhas na tabela. Os operadores descobrem automaticamente os novos fragmentos e criam processadores para tratar os dados provenientes deles. A KCL também distribui os fragmentos no fluxo entre todos os operadores e processadores de registros disponíveis.
A KCL garante que os dados existentes nos fragmentos antes do refragmentação sejam processados primeiro. Depois do processamento dos dados, os dados dos novos fragmentos são enviados para processadores de registros. Dessa forma, a KCL preserva a ordem em que os registros de dados foram adicionados ao fluxo para uma determinada chave de partição.
Exemplo: refragmentação, escalabilidade e processamento paralelo
O exemplo a seguir ilustra como a KCL ajuda a lidar com escalabilidade e refragmentação:
-
Por exemplo, a aplicação está sendo executada em uma instância do EC2 e processa um fluxo de dados do Kineses com quatro fragmentos. Essa instância tem um operador da KCL e quatro processadores de registros (um processador de registros para cada fragmento). Esses quatro processadores de registros são executados em paralelo no mesmo processo.
-
Em seguida, ao escalar o aplicativo para usar outra instância, duas instâncias processarão um único fluxo que tem quatro fragmentos. Ao ser iniciado na segunda instância, o operador da KCL faz balanceamento de carga com a primeira instância, de modo que cada instância passa a processar dois fragmentos.
-
Se decidir dividir os quatro fragmentos em cinco, a KCL coordenará novamente o processamento entre as instâncias: uma instância processará três fragmentos e a outra processará dois fragmentos. Uma coordenação semelhante ocorre ao mesclar fragmentos.
Normalmente, ao usar a KCL, é necessário garantir que o número de instâncias não exceda o número de fragmentos (exceto para fins de espera de falha). Cada fragmento é processado por exatamente um operador da KCL e tem exatamente um processador de registros correspondente, para nunca necessitar de várias instâncias para processar apenas um fragmento. Mas como um operador pode processar qualquer número de fragmentos, tudo bem se o número de fragmentos ultrapassar o número de instâncias.
Para expandir o processamento do aplicativo, deve-se testar uma combinação destas abordagens:
-
Aumentar o tamanho da instância (porque todos os processadores de registros são executados em paralelo em um processo)
-
Aumentar o número de instâncias até o número máximo de fragmentos abertos (porque os fragmentos podem ser processados de forma independente)
-
Aumentar o número de fragmentos (o que aumenta o nível de paralelismo)
Observe que é possível usar o ajuste de escala automático para escalar automaticamente as instâncias com base em métricas apropriadas. Para obter mais informações, consulte o Guia do usuário do Amazon EC2 Auto Scaling.
Quando a refragmentação aumenta o número de fragmentos no fluxo, o aumento correspondente no número de processadores de registros aumenta a carga nas instâncias do EC2 que os hospedam. Se as instâncias fazem parte de um grupo de Auto Scaling e a carga aumenta suficientemente, o grupo de Auto Scaling adiciona mais instâncias para lidar com o aumento de carga. É necessário configurar as instâncias para iniciar a aplicação do Amazon Kinesis Data Streams na inicialização, para que os operadores e processadores de registros adicionais se tornem imediatamente ativos na nova instância.
Para obter mais informações sobre a refragmentação, consulte Refragmentar um fluxo.