Utilisation de consommateurs individuels
Consommer des messages à partir d'un flux à l'aide d'un consommateur individuel.
Si vous utilisez des consommateurs individuels pour consommer des messages de vos flux au lieu d'utiliser des groupes de consommateurs, vous ne pouvez pas tirer parti de nombreux avantages du service de flux, tels que la coordination gérée par le service, l'ajustement horizontal et la gestion des décalages. Vos applications devront gérer ces scénarios, et bien d'autres, par programmation.
Pour ces raisons, nous recommandons l'utilisation de groupes de consommateurs dans un environnement de production, mais il peut être utile d'utiliser des consommateurs individuels pour tester des applications ou à des fins de démonstration de faisabilité.
Utilisation de curseurs
Un curseur est un pointeur vers un emplacement dans un flux. L'emplacement peut être un décalage ou une heure spécifique dans une partition.
Avant de commencer à consommer des messages, vous devez indiquer le point à partir duquel vous voulez commencer la consommation. Pour ce faire, créez un curseur.
Cinq types de curseur sont pris en charge :
TRIM_HORIZON
- Commencer à consommer à partir du message disponible le plus ancien dans le flux. Créez un curseur surTRIM_HORIZON
pour consommer tous les messages d'un flux.AT_OFFSET
- Commencer à consommer à une position spécifique. La position doit être située après la position du message le plus ancien et être inférieure ou identique à la position du dernier message publié.AFTER_OFFSET
- Commencer à consommer après la position indiquée. Ce curseur présente les mêmes restrictions que le curseurAT_OFFSET
.AT_TIME
- Commencer à consommer à partir d'un moment donné. L'horodatage du message retourné sera identique ou postérieur à l'heure fournie.LATEST
- Commencer à consommer les messages publiés après la création du curseur.
Lorsque vous créez un curseur pour un consommateur individuel, vous devez indiquer dans le flux la partition à utiliser par le curseur. Si votre flux comporte plusieurs partitions avec des messages, vous devez créer plusieurs curseurs pour les lire.
Après avoir créé un curseur, vous pouvez commencer à consommer des messages en les obtenant.
Tant que vous consommez des messages, vous n'avez pas besoin de recréer un curseur. Créez des curseurs en dehors de vos boucles pour obtenir des messages.
Obtention des messages
Après avoir créé un curseur, obtenez (lisez) les messages, en spécifiant ce curseur pour commencer à consommer les messages. Le service répond avec vos messages et la valeur d'en-tête opc-next-cursor
. Utilisez la valeur d'en-tête retournée lors de votre prochain appel GetMessages. Le curseur retourné n'est jamais nul, mais il expire dans les 5 minutes qui suivent. Si vous arrêtez de consommer des messages pendant plus de cinq minutes, vous devrez recréer un curseur.
Si plusieurs consommateurs lisent depuis la même partition, ils reçoivent les mêmes messages. Déterminez comment votre application traite ces messages.
S'il n'y a plus de messages non lus dans la partition, le service de diffusion en continu retourne une liste vide de messages.
Les tailles de lot GetMessages sont basées sur la taille moyenne des messages publiés pour le flux. Par défaut, le service retourne le plus grand nombre de messages possible. Vous pouvez utiliser le paramètre limit
pour spécifier n'importe quelle valeur allant jusqu'à 10 000, mais tenez compte de la taille moyenne des messages pour éviter de dépasser le débit du flux.
Retard
Pour déterminer si votre consommateur est en retard (vous produisez plus vite que vous ne consommez), vous pouvez utiliser l'horodatage du message. Si le consommateur est en retard, envisagez de générer plus de consommateurs pour prendre en charge certaines des partitions du premier consommateur. Il n'y a aucun moyen de récupérer si vous êtes en retard sur une seule partition.
Tenez compte des options suivantes :
- Créez un nouveau flux avec plus de partitions.
- Utilisez des groupes de consommateurs.
- Si le problème est causé par une zone cliquable, modifiez la stratégie de clé de message.
- Réduisez le temps de traitement des messages ou traitez les demandes en parallèle.
Pour savoir combien de messages il reste à consommer dans une partition particulière, utilisez un curseur de type LATEST
, obtenez le décalage du message publié suivant, et faire le delta avec le décalage que vous êtes en train de consommer.
Gestion des décalages
Les décalages indiquent l'emplacement d'un message dans une partition. Si le consommateur redémarre ou que vous devez récupérer après une panne, vous pouvez utiliser le décalage pour relancer la lecture à partir du flux.
Lorsque vous utilisez des consommateurs individuels, votre application de consommateur doit gérer les décalages traités (voir Validation manuelle d'un décalage). Le consommateur est responsable du stockage des décalages qu'il a atteints ou auxquels il s'est arrêté, pour chaque partition. Lorsque le consommateur redémarre, lisez le décalage du dernier message traité, puis créez un curseur de type AFTER_OFFSET
et spécifiez le décalage que vous venez d'obtenir. Nous ne fournissons pas de conseils pour stocker le décalage du dernier message traité. Vous pouvez utiliser n'importe quelle méthode, telle qu'un autre flux, un fichier sur votre machine ou le service de stockage d'objets.
Les décalages de message ne sont pas denses. Les décalages augmentent de façon monotone. Ils ne diminuent pas, et parfois ils augmentent de plus d'un. Par exemple, si vous publiez deux messages dans la même partition, le premier message peut avoir un décalage de 42 et le deuxième message peut avoir un décalage de 45 (les décalages de 43 et de 44 sont inexistants).