Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Migra da KCL 2.x a KCL 3.x
Questo argomento fornisce istruzioni dettagliate per migrare il consumatore da KCL 2.x a KCL 3.x. Ti consigliamo di migrare a KCL 3.5 o versioni successive per utilizzare il formato a tabella singola. KCL 3.x supporta la migrazione sul posto dei consumatori di KCL 2.x. Puoi continuare a consumare i dati del tuo flusso di dati Kinesis mentre migri i tuoi lavoratori in modo continuativo.
Importante
KCL 3.x mantiene le stesse interfacce e metodi di KCL 2.x. Pertanto non è necessario aggiornare il codice di elaborazione dei record durante la migrazione. Tuttavia, è necessario impostare la configurazione corretta e verificare i passaggi necessari per la migrazione. Ti consigliamo vivamente di seguire i seguenti passaggi di migrazione per un'esperienza di migrazione fluida.
Importante
Per le nuove migrazioni da KCL 2.x a KCL 3.5 o versioni successive, per impostazione predefinita viene utilizzato il formato a tabella singola. L'applicazione utilizza solo la tabella di lease per tutti i metadati, eliminando la necessità di metriche dei lavoratori e tabelle di stato dei coordinatori separate. Per ulteriori informazioni, consulta Formato a tabella singola per KCL.
Fase 1: prerequisiti
Prima di iniziare a usare KCL 3.x, assicurati di avere quanto segue:
-
Java Development Kit (JDK) 8 o successivo
-
AWS SDK per Java 2.x
-
Maven o Gradle per la gestione delle dipendenze
Importante
Non utilizzare le AWS SDK per Java versioni da 2.27.19 a 2.27.23 con KCL 3.x. Queste versioni includono un problema che causa un errore di eccezione relativo all'utilizzo di DynamoDB da parte di KCL. Ti consigliamo di utilizzare la AWS SDK per Java versione 2.28.0 o successiva per evitare questo problema.
Fase 2: Aggiungere dipendenze
Se stai usando Maven, aggiungi la seguente dipendenza al tuo file. pom.xml Assicurati di aver sostituito 3.x.x con l'ultima versione di KCL.
<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>
Se stai usando Gradle, aggiungi quanto segue al tuo file. build.gradle Assicurati di aver sostituito 3.x.x con l'ultima versione di KCL.
implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'
Puoi controllare l'ultima versione di KCL nel Maven Central Repository. https://search.maven.org/artifact/software.amazon.kinesis/amazon-kinesis-client
Fase 3: Imposta la configurazione relativa alla migrazione
Per migrare da KCL 2.x a KCL 3.x, devi impostare il seguente parametro di configurazione:
-
CoordinatorConfig.clientVersionConfig: Questa configurazione determina in quale modalità di compatibilità della versione KCL verrà eseguita l'applicazione. Quando si migra da KCL 2.x a 3.x, la migrazione viene eseguita in fasi. Innanzitutto, imposta questa configurazione
CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1e distribuiscila a tutti i lavoratori. Aggiungi la riga seguente quando crei l'oggetto di pianificazione:
configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1)
In questa fase, la tua applicazione rimane compatibile con KCL 2.x e la migrazione non viene avviata, il che ti consente di implementare in sicurezza la libreria KCL 3.x in tutta la tua flotta.
Dopo che tutti i lavoratori hanno eseguito conCLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1, imposta questa configurazione su per CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X avviare la migrazione. Per impostare questa configurazione, aggiungi la riga seguente durante la creazione dell'oggetto di pianificazione:
configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X)
Quello che segue è un esempio di come impostare la CoordinatorConfig.clientVersionConfig migrazione da KCL 2.x a 3.x. Puoi regolare altre configurazioni secondo necessità in base ai tuoi requisiti specifici:
Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );
È importante che tutti i lavoratori dell'applicazione consumer utilizzino lo stesso algoritmo di bilanciamento del carico in un dato momento perché KCL 2.x e 3.x utilizzano algoritmi di bilanciamento del carico diversi. L'esecuzione di lavoratori con algoritmi di bilanciamento del carico diversi può causare una distribuzione del carico non ottimale poiché i due algoritmi funzionano in modo indipendente.
Questa impostazione di compatibilità con KCL 2.x consente all'applicazione KCL 3.x di funzionare in una modalità compatibile con KCL 2.x e di utilizzare l'algoritmo di bilanciamento del carico per KCL 2.x fino a quando tutti i worker dell'applicazione consumer non saranno aggiornati a KCL 3.x. Al termine della migrazione, KCL passerà automaticamente alla modalità con funzionalità complete di KCL 3.x e inizierà a utilizzare un nuovo algoritmo di bilanciamento del carico KCL 3.x per tutti i lavoratori in esecuzione.
Importante
Se non stai usando ConfigsBuilder ma creando un LeaseManagementConfig oggetto per impostare le configurazioni, devi aggiungere un altro parametro chiamato applicationName in KCL versione 3.x o successiva. Per i dettagli, vedi Errore di compilazione con il costruttore. LeaseManagementConfig Si consiglia di ConfigsBuilder utilizzarlo per impostare le configurazioni KCL. ConfigsBuilderfornisce un modo più flessibile e manutenibile per configurare la tua applicazione KCL.
Nota
Per le ultime modifiche alla configurazione relative alla migrazione per KCL 3.5, vedi gli aggiornamenti di configurazione di KCL 3.5. https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/src/main/java/software/amazon/kinesis/coordinator/CoordinatorConfig.java
Fase 4: Segui le migliori pratiche per l'implementazione del metodo shutdownRequested ()
KCL 3.x introduce una funzionalità chiamata graceful lease handoff per ridurre al minimo la rielaborazione dei dati quando un contratto di locazione viene consegnato a un altro lavoratore come parte del processo di riassegnazione del leasing. Ciò si ottiene inserendo l'ultimo numero di sequenza elaborato nella tabella del leasing prima della cessione del contratto di leasing. Per assicurarvi che il grazioso trasferimento del lease funzioni correttamente, dovete assicurarvi di richiamare l'oggetto all'interno del metodo della classe. checkpointer shutdownRequested RecordProcessor Se non state richiamando l'checkpointeroggetto all'interno del shutdownRequested metodo, potete implementarlo come illustrato nell'esempio seguente.
Importante
-
Il seguente esempio di implementazione è un requisito minimo per il grazioso trasferimento del contratto di locazione. È possibile estenderlo per includere logica aggiuntiva relativa al checkpoint, se necessario. Se stai eseguendo un'elaborazione asincrona, assicurati che tutti i record consegnati al downstream siano stati elaborati prima di richiamare il checkpoint.
-
Se da un lato la semplificazione del leasing riduce significativamente la probabilità di rielaborazione dei dati durante i trasferimenti in leasing, dall'altro non elimina completamente questa possibilità. Per preservare l'integrità e la coerenza dei dati, progettate le vostre applicazioni consumer downstream in modo che siano idempotenti. Ciò significa che dovrebbero essere in grado di gestire potenziali elaborazioni di record duplicati senza effetti negativi sull'intero sistema.
/** * 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); } }
Fase 5: Verifica i prerequisiti di KCL 3.x per la raccolta delle metriche relative ai lavoratori
KCL 3.x raccoglie le metriche di utilizzo della CPU, come l'utilizzo della CPU dai lavoratori, per bilanciare il carico tra i lavoratori in modo uniforme. Gli applicativi consumer possono essere eseguiti su Amazon EC2, Amazon ECS, Amazon EKS o. AWS Fargate KCL 3.x può raccogliere i parametri di utilizzo della CPU dai lavoratori solo quando sono soddisfatti i seguenti prerequisiti:
Amazon Elastic Compute Cloud(Amazon EC2)
-
Il tuo sistema operativo deve essere Linux OS.
-
Devi abilitare IMDSv2 nella tua istanza EC2.
Amazon Elastic Container Service (Amazon ECS) su Amazon EC2
-
Il tuo sistema operativo deve essere Linux OS.
-
È necessario abilitare l'endpoint dei metadati delle attività ECS versione 4.
-
La versione dell'agente container Amazon ECS deve essere 1.39.0 o successiva.
Amazon ECS attivo AWS Fargate
-
È necessario abilitare l'endpoint di metadati delle attività di Fargate versione 4. Se si utilizza la versione 1.4.0 o successiva della piattaforma Fargate, questa opzione è abilitata per impostazione predefinita.
-
Piattaforma Fargate versione 1.4.0 o successiva.
Amazon Elastic Kubernetes Service (Amazon EKS) su Amazon EC2
-
Il tuo sistema operativo deve essere Linux OS.
Amazon EKS su AWS Fargate
-
Piattaforma Fargate 1.3.0 o versione successiva.
Importante
Se KCL 3.x non è in grado di raccogliere le metriche sull'utilizzo della CPU dai lavoratori perché i prerequisiti non sono soddisfatti, ribilancierà il carico in base al livello di throughput per leasing. Questo meccanismo di ribilanciamento alternativo assicurerà che tutti i lavoratori ottengano livelli di produttività totale simili grazie ai contratti di locazione assegnati a ciascun lavoratore. Per ulteriori informazioni, consulta In che modo KCL assegna i contratti di locazione ai lavoratori e bilancia il carico.
Passaggio 6: aggiornamento delle autorizzazioni IAM per KCL 3.x
Devi aggiungere le seguenti autorizzazioni al ruolo o alla policy IAM associata alla tua applicazione consumer KCL 3.x. Ciò comporta l'aggiornamento della politica IAM esistente utilizzata dall'applicazione KCL. Per ulteriori informazioni, consulta Autorizzazioni IAM richieste per le applicazioni consumer KCL.
Importante
Le tue applicazioni KCL esistenti potrebbero non avere le seguenti azioni e risorse IAM aggiunte nella policy IAM perché non erano necessarie in KCL 2.x. Assicurati di averle aggiunte prima di eseguire l'applicazione KCL 3.x:
-
Azioni:
UpdateTable-
Risorse (ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName
-
-
Azioni:
Query-
Risorse (ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*
-
-
Azioni:
CreateTable,DescribeTable,Scan,,GetItem,PutItem,UpdateItemDeleteItem-
Risorse (ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats,arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState
Sostituisci «regione», «account» e "KCLApplicationName" negli ARN rispettivamente con il tuo Regione AWS Account AWS numero e il nome dell'applicazione KCL. Se usi le configurazioni per personalizzare i nomi delle tabelle di metadati create da KCL, usa i nomi delle tabelle specificati invece del nome dell'applicazione KCL.
-
Passaggio 7: distribuisci il codice KCL 3.x ai tuoi dipendenti
Dopo aver impostato la configurazione richiesta per la migrazione e completato tutte le checklist precedenti per la migrazione, puoi creare e distribuire il codice ai tuoi lavoratori.
Nota
Se vedi un errore di compilazione con il LeaseManagementConfig costruttore, vedi Errore di compilazione con il costruttore per informazioni sulla risoluzione dei LeaseManagementConfig problemi.
Fase 8: Completare la migrazione
Durante l'implementazione del codice KCL 3.x, KCL continua a utilizzare l'algoritmo di assegnazione del leasing di KCL 2.x. Quando hai distribuito con successo il codice KCL 3.x a tutti i tuoi lavoratori, KCL lo rileva automaticamente e passa al nuovo algoritmo di assegnazione del leasing basato sull'utilizzo delle risorse da parte dei lavoratori. Per maggiori dettagli sul nuovo algoritmo di assegnazione del leasing, vedi. In che modo KCL assegna i contratti di locazione ai lavoratori e bilancia il carico
Durante la distribuzione, è possibile monitorare il processo di migrazione con le seguenti metriche emesse a. CloudWatch È possibile monitorare le metriche nell'ambito dell'operazione. Migration Tutte le metriche sono KCL-application permetriche e impostate a livello di metrica. SUMMARY Se la Sum statistica della CurrentState:3xWorker metrica corrisponde al numero totale di lavoratori nella tua applicazione KCL, indica che la migrazione a KCL 3.x è stata completata con successo.
Importante
KCL impiega almeno 10 minuti per passare al nuovo algoritmo di assegnazione del leasee dopo che tutti i lavoratori sono pronti per eseguirlo.
| Metriche | Description |
|---|---|
CurrentState:3xWorker |
Il numero di lavoratori KCL è migrato con successo a KCL 3.x e ha eseguito il nuovo algoritmo di assegnazione del leasing. Se il
|
CurrentState:2xCompatibleWorker |
Il numero di lavoratori KCL in esecuzione in modalità compatibile con KCL 2.x durante il processo di migrazione. Un valore diverso da zero per questa metrica indica che la migrazione è ancora in corso.
|
Fault |
Il numero di eccezioni riscontrate durante il processo di migrazione. La maggior parte di queste eccezioni sono errori transitori e KCL 3.x riproverà automaticamente a completare la migrazione. Se osservi un valore
|
GsiStatusReady |
Lo stato della creazione dell'indice secondario globale (GSI) nella tabella dei contratti di locazione. Questa metrica indica se il GSI nella tabella di leasing è stato creato, un prerequisito per eseguire KCL 3.x. Il valore è 0 o 1, dove 1 indica che la creazione è avvenuta con successo. Durante uno stato di rollback, questa metrica non verrà emessa. Dopo aver eseguito nuovamente il rollforward, puoi riprendere il monitoraggio di questa metrica.
|
workerMetricsReady |
Stato dell'emissione delle metriche relative ai lavoratori da parte di tutti i lavoratori. Le metriche indicano se tutti i lavoratori emettono parametri come l'utilizzo della CPU. Il valore è 0 o 1, dove 1 indica che tutti i lavoratori stanno emettendo correttamente le metriche e sono pronti per il nuovo algoritmo di assegnazione del leasing. Durante uno stato di rollback, questa metrica non verrà emessa. Dopo aver eseguito nuovamente il rollforward, puoi riprendere il monitoraggio di questa metrica.
|
KCL fornisce la funzionalità di rollback alla modalità compatibile 2.x durante la migrazione. Una volta completata la migrazione a KCL 3.x, ti consigliamo di rimuovere l'CoordinatorConfig.clientVersionConfigimpostazione CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X se il rollback non è più necessario. La rimozione di questa configurazione interrompe l'emissione di metriche relative alla migrazione dall'applicazione KCL.
Nota
Ti consigliamo di monitorare le prestazioni e la stabilità dell'applicazione per un certo periodo durante la migrazione e dopo aver completato la migrazione. Se riscontri problemi, puoi ripristinare i lavoratori per utilizzare la funzionalità compatibile con KCL 2.x utilizzando il KCL Migration Tool.