web-dev-qa-db-fra.com

Points de contrôle Amazon KCL et horizon de compensation

Quel est le lien entre les points de contrôle et le découpage dans la bibliothèque AWS KCL? 

La page de documentation Gestion du démarrage, de l’arrêt et de la régulation dit:

Par défaut, le KCL commence à lire les enregistrements à partir de la pointe du flux , Qui est le dernier enregistrement ajouté. Dans cette configuration , Si une application produisant des données ajoute des enregistrements au flux Avant que des processeurs d'enregistrement récepteurs ne soient en cours d'exécution, les enregistrements Ne sont pas lus après leur démarrage. up.

Pour modifier le comportement des processeurs d'enregistrement afin que toujours Lise les données du début du flux, définissez la valeur suivante Dans le fichier de propriétés de votre application Amazon Kinesis Streams:

initialPositionInStream = TRIM_HORIZON

La page de documentation Développement d’un consommateur Amazon Kinesis Client Library sous Java dit:

Streams nécessite que le processeur d’enregistrements garde la trace des enregistrements Déjà traités dans un fragment. Le KCL prend en charge ce suivi en transmettant un point de contrôle (IRecordProcessorCheckpointer) pour traiter les enregistrements. Le processeur d'enregistrement Appelle la méthode du point de contrôle sur cette interface pour informer le KCL de la progression de Dans le traitement des enregistrements de la partition. Dans le cas où le travailleur échoue, le KCL utilise ces informations pour relancer Le traitement du fragment au dernier enregistrement traité connu.

La première page semble indiquer que le KCL reprend au sommet du flux, la deuxième page du dernier enregistrement traité connu (marqué comme traité par la variable RecordProcessor à l'aide de la variable checkpointer). Dans mon cas, je dois absolument redémarrer au dernier enregistrement traité connu. Dois-je définir initialPositionInStream sur TRIM_HORIZON?

9
Edmondo1984

Avec kinesis stream, vous avez deux options, vous pouvez lire les derniers enregistrements ou commencer par les plus anciens (TRIM_HORIZON).

Cependant, une fois que vous avez démarré votre application, elle lit simplement la position arrêtée à l'aide de ses points de contrôle. Vous pouvez voir ces points de contrôle dans dynamodb (généralement, le nom de la table est identique à celui de l'application). Donc, si vous redémarrez votre application, elle continuera généralement là où elle s’est arrêtée.

La réponse est non, vous n'avez pas besoin de définir le paramètre initialPositionInStream sur TRIM_HORIZON.

11
itai ariel

Lorsque vous lisez des événements à partir d’un flux Kinesis, vous avez 4 options:

TRIM_HORIZON - les événements les plus anciens qui sont encore dans les fragments de flux avant d'être automatiquement ajustés (par défaut, 1 jour, mais pouvant être étendu jusqu'à 7 jours). Vous utiliserez cette option si vous souhaitez démarrer une nouvelle application qui traitera tous les enregistrements disponibles dans le flux, mais cela prendra un certain temps avant de pouvoir rattraper et commencer à traiter les événements en temps réel.

DERNIÈRE - les derniers événements dans le flux et ignore tous les événements passés. Vous utiliserez cette option si vous démarrez une nouvelle application que vous souhaitez traiter immédiatement en temps réel. 

AT/AFTER_SEQUENCE_NUMBER - le numéro de séquence est généralement le point de contrôle que vous conservez pendant le traitement des événements. Ces points de contrôle vous permettent de traiter les événements de manière fiable, même en cas de défaillance du lecteur ou lorsque vous souhaitez mettre à jour sa version et poursuivre le traitement de tous les événements sans perdre aucun d'entre eux. La différence entre AT/AFTER dépend de l'heure de votre point de contrôle, avant ou après le traitement des événements.

Notez que ceci est la seule option shard spécifique , car toutes les autres options sont globales pour le flux. Lorsque vous utilisez le KCL, il gère une table DynamoDB pour cette application avec un enregistrement pour chaque fragment avec le numéro de séquence "actuel" pour ce fragment.

AT_TIMESTAMP - l'heure estimée de l'événement placé dans le flux. Vous utiliserez cette option si vous souhaitez rechercher des événements spécifiques à traiter en fonction de leur horodatage. Par exemple, lorsque vous savez que vous avez eu un événement réel dans votre service à une heure précise, vous pouvez développer une application qui traitera ces événements spécifiques, même si vous ne possédez pas le numéro de séquence. 

Vous trouverez plus de détails dans la documentation Kinesis ici: https://docs.aws.Amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

2
Guy

Vous devriez utiliser le "TRIM_HORIZON". Cela n'aura d'effet que sur le premier moment où votre application commencera à lire les enregistrements du flux. Après cela, elle continuera à partir de la dernière position connue.

0
Roee Gavirel