Utilizzo di singoli consumatori

Utilizza i messaggi di un flusso utilizzando un singolo consumer.

Se si utilizzano singoli consumer per utilizzare i messaggi dei flussi anziché i gruppi di consumatori, non è possibile sfruttare molti dei vantaggi dello streaming, ad esempio il coordinamento gestito dai servizi, il ridimensionamento orizzontale e la gestione degli offset. Le tue applicazioni dovranno gestire questi scenari, e molti altri, a livello di programmazione.

Per questi motivi, si consiglia di utilizzare gruppi di consumer in un ambiente di produzione, ma potrebbe essere utile utilizzare singoli consumer per il test o le applicazioni proof-of-concept.

Uso dei cursori

Un cursore è un puntatore a una posizione in un flusso. La posizione può essere un offset o un orario specifico in una partizione.

Prima di iniziare a utilizzare i messaggi, è necessario indicare il punto da cui si desidera avviare il consumo. È possibile eseguire questa operazione creando un cursore.

Esistono cinque tipi di cursore supportati:

  • TRIM_HORIZON: inizia a utilizzare il messaggio meno recente disponibile nel flusso. Creare un cursore in TRIM_HORIZON per utilizzare tutti i messaggi in un flusso.
  • AT_OFFSET: inizia a utilizzare in corrispondenza di un offset specificato. L'offset deve essere maggiore o uguale all'offset del messaggio meno recente e minore o uguale all'offset pubblicato più recente.
  • AFTER_OFFSET: inizia a utilizzare dopo l'offset specificato. Questo cursore ha le stesse restrizioni del cursore AT_OFFSET.
  • AT_TIME: inizia a utilizzare da un determinato momento. L'indicatore orario del messaggio restituito sarà uguale o successivo all'ora specificata.
  • LATEST: inizia a utilizzare i messaggi pubblicati dopo la creazione del cursore.

Quando si crea un cursore per un singolo consumer, è necessario specificare la partizione nel flusso da utilizzare per il cursore. Se il tuo flusso ha più di una partizione con messaggi, devi creare più cursori per leggerli.

Dopo aver creato un cursore, è possibile iniziare a consumare i messaggi recuperandoli.

Se si continua a consumare messaggi, non è necessario ricreare un cursore. Crea cursori al di fuori dei tuoi loop per ottenere messaggi.

Recupero dei messaggi

Dopo aver creato un cursore, ottenere (leggere) i messaggi, specificando tale cursore per iniziare a utilizzare i messaggi. Il servizio risponde con i messaggi e il valore dell'intestazione opc-next-cursor. Utilizzare il valore di intestazione restituito nella successiva chiamata GetMessages. Il cursore restituito non è mai nullo, ma scade tra cinque minuti. Se si interrompe il consumo dei messaggi per più di cinque minuti, sarà necessario ricreare un cursore.

Se si dispone di più consumer che leggono dalla stessa partizione, ricevono gli stessi messaggi. Decidere in che modo l'applicazione elabora questi messaggi.

Se non ci sono più messaggi non letti nella partizione, Streaming restituisce un elenco vuoto di messaggi.

Le dimensioni batch GetMessages si basano sulla dimensione media dei messaggi pubblicati nel flusso. Per impostazione predefinita, il servizio restituisce il maggior numero possibile di messaggi. È possibile utilizzare il parametro limit per specificare qualsiasi valore fino a 10.000, ma considerare la dimensione media dei messaggi per evitare di superare il throughput nel flusso.

Cadendo dietro

Per determinare se il consumatore è in ritardo (produrre più velocemente di quanto si sta consumando), è possibile utilizzare l'indicatore orario del messaggio. Se il consumatore è in ritardo, considera di generare più consumatori per rilevare alcune delle partizioni dal primo consumatore. Non c'è modo di recuperare se si sta cadendo indietro su una singola partizione.

Considerare le opzioni riportate di seguito.

  • Crea un nuovo flusso con più partizioni.
  • Utilizzare gruppi di consumatori.
  • Se il problema è causato da un hotspot, modificare la strategia chiave del messaggio.
  • Riduci i tempi di elaborazione dei messaggi o gestisci le richieste in parallelo.

Per scoprire quanti messaggi rimangono da utilizzare in una determinata partizione, utilizzare un cursore di tipo LATEST, ottenere l'offset del messaggio pubblicato successivo e effettuare il delta con l'offset che si sta attualmente utilizzando.

Gestione degli offset

Gli offset indicano la posizione di un messaggio all'interno di una partizione. Se il consumer si riavvia o è necessario eseguire il ripristino da un errore, è possibile utilizzare l'offset per riavviare la lettura dal flusso.

Suggerimento

I gruppi di consumatori possono gestire automaticamente i commit degli offset.

Quando si utilizzano singoli consumer, l'applicazione consumer deve gestire gli offset elaborati (vedere Commit manuale di un offset). Il consumatore è responsabile della memorizzazione degli offset che ha raggiunto o interrotto per ciascuna partizione. Quando il consumer viene riavviato, leggere l'offset dell'ultimo messaggio elaborato, quindi creare un cursore di tipo AFTER_OFFSET e specificare l'offset appena ottenuto. Non forniamo alcuna guida per memorizzare l'offset dell'ultimo messaggio elaborato. Puoi utilizzare qualsiasi metodo, come un altro flusso, un file sul tuo computer o lo storage degli oggetti.

Nota

Gli offset dei messaggi non sono densi. Gli offset sono numeri monotoni in aumento. Non diminuiscono, e a volte aumentano di più di uno. Ad esempio, se si pubblicano due messaggi nella stessa partizione, il primo messaggio potrebbe avere un offset di 42 e il secondo messaggio potrebbe avere un offset di 45 (offset di 43 e 44 inesistenti).