Partizionamento di un flusso

Per sfruttare appieno la capacità del servizio di streaming di operare su larga scala, configurare il numero di partizioni nel flusso.

Prima di creare un flusso, considera il throughput previsto del flusso, la strategia delle chiavi di partizione e il modo in cui il flusso verrà utilizzato. La maggior parte dei valori di configurazione non può essere modificata dopo la creazione del flusso. Ad esempio, dopo la creazione di un flusso, non è possibile modificare il tempo di conservazione dei messaggi o il numero di partizioni.

Partizioni e throughput

Quando si crea un flusso, è necessario specificare il numero di partizioni del flusso. Il throughput previsto dell'applicazione consente di determinare il numero di partizioni per il flusso.

Moltiplica la dimensione media dei messaggi per il numero massimo di messaggi scritti al secondo per stimare il throughput previsto. Poiché una singola partizione è limitata a una velocità di scrittura dei dati di 1 MB al secondo e a 5 richieste GET al secondo per gruppo di consumer, un throughput più elevato richiede più partizioni per evitare limitazioni. Tieni a mente ulteriori limiti di streaming quando prendi le tue decisioni di progettazione.

Suggerimento

Per aiutarti a gestire i picchi delle applicazioni, ti consigliamo di allocare partizioni leggermente più alte del tuo throughput massimo.

Pubblicazione nelle partizioni

Il contenuto dei messaggi che si intende pubblicare in un flusso può anche aiutare a determinare quante partizioni dovrebbe avere il flusso.

Un messaggio viene pubblicato in una partizione del flusso. Se esistono più partizioni, quelle in cui viene pubblicato il messaggio vengono calcolate mediante la chiave del messaggio.

Per ulteriori informazioni, vedere Pubblicazione dei messaggi.

Chiave per il mapping della partizione

I messaggi con la stessa chiave vanno alla stessa partizione. I messaggi con chiavi diverse possono passare a partizioni diverse o alla stessa partizione. Se non si specifica una chiave, Streaming riconosce la chiave nulla e genera una chiave casuale per conto dell'utente. Se un utente pubblica lo stesso messaggio due volte, potrebbe passare a partizioni diverse, perché viene generata una chiave completamente nuova. Non aspettatevi che tutti i messaggi con una chiave nulla passino alla stessa partizione.

Per impostazione predefinita, lo streaming fornisce una distribuzione uniforme e prevedibile dei messaggi alle partizioni di un flusso. Le API di streaming non consentono di specificare esattamente in quali dati di partizione vengono pubblicati, poiché ciò può comportare il rischio di individuare una singola partizione se un utente non è a conoscenza delle sfumature dello streaming. Tuttavia, se si utilizzano le API Kafka per interagire con Streaming, è possibile eseguire il partizionamento personalizzato e mappare in modo esplicito i messaggi alle partizioni, sebbene non sia consigliabile.

chiavi di partizionamento effettive

Per garantire una distribuzione uniforme dei messaggi, sono necessari valori efficaci per le chiavi dei messaggi. Per creare un valore efficace, considera la selettività e la cardinalità dei tuoi dati di streaming.

Cardinalità: considerare il numero totale di chiavi univoche che potrebbero essere potenzialmente generate in base allo specifico caso d'uso. Una maggiore cardinalità chiave generalmente significa una migliore distribuzione.

Selectività: considerare il numero di messaggi con ogni chiave. Maggiore selettività significa più messaggi per chiave, che possono portare a hotspot.

Mirare sempre ad alta cardinalità e bassa selettività.

Ordinamento

I messaggi con la stessa chiave vengono conservati nell'ordine in cui vengono pubblicati e consegnati ai consumatori nello stesso ordine in cui sono stati prodotti. Poiché i messaggi con la stessa chiave vanno alla stessa partizione, questa garanzia si applica solo a livello di partizione.

Partizioni e gruppi di consumer

Se il flusso verrà utilizzato da uno o più gruppi di consumer, prendere in considerazione tale elemento nella decisione relativa al numero delle relative partizioni. Le letture delle partizioni sono bilanciate tra le istanze in un gruppo di consumer.

I gruppi di consumer possono utilizzare una sola istanza alla volta solo se il flusso dispone di una sola partizione. Se il tuo flusso ha più partizioni, puoi ridimensionare il numero di istanze fino al numero delle partizioni e avere un'istanza nel gruppo che legge da una partizione nel flusso.

Per ulteriori informazioni, vedere Uso dei gruppi di consumer.