Uso di Apache Kafka

Apache Kafka è una piattaforma di messaggistica distribuita open source per la pubblicazione e la sottoscrizione appositamente progettata per gestire i dati in streaming in tempo reale per lo streaming distribuito, il pipelining e la ripetizione dei feed di dati per operazioni rapide e scalabili. Kafka è una soluzione basata su broker che opera mantenendo i flussi di dati come record all'interno di un cluster di server.

Nei cluster di Big Data Service, Kafka può essere utilizzato nei modi riportati di seguito.

  1. Creare un cluster di profili Kafka:
    1. Crea un cluster.
    2. Nel campo Profilo cluster selezionare Kafka.
  2. Creare un cluster di profili Hadoop_Extended e aggiungere Kafka al cluster.
    1. Crea un cluster.
    2. Nel campo Profilo cluster selezionare Hadoop_Extended.
    3. Aggiungere Kafka al cluster.

Procedure ottimali per Apache Kafka

Requisiti hardware

Apache Kafka, per il suo regolare funzionamento, richiede una piccola quantità di risorse, soprattutto con alcune operazioni di configurazione. Per impostazione predefinita, Kafka può essere eseguito su 1 core e 1 GB di memoria con storage scalato in base ai requisiti per la conservazione dei dati.

La CPU è raramente un collo di bottiglia perché Kafka è I/O pesante. Tuttavia, una CPU di dimensioni moderate con un numero sufficiente di thread è importante per gestire le connessioni concorrenti e le attività in background.

  • Nodo broker Kafka: otto core, da 64 GB a 128 GB di RAM, due o più dischi da 2 TB (standard2,8 o superiore preferibilmente DenseIO o equivalente)
  • Un minimo di tre nodi broker Kafka
  • Profilo hardware: più RAM e dischi ad alta velocità sono migliori
  • Installare i broker Kafka sui nodi di lavoro in quanto possono crescere orizzontalmente in dimensioni

Topologia cluster Kafka consigliata

  1. Rimuovi Node Manager dal nodo di lavoro
  2. Poiché i broker Kafka hanno bisogno di almeno tre nodi per la replica/HA, potrebbe essere opportuno eseguire il provisioning di nodi di lavoro aggiuntivi per Kafka.
  3. Esegue il provisioning di nodi di lavoro HDFS aggiuntivi e disattiva sia il nodo dati che il Node Manager.
    Nota

    I nodi di lavoro correnti vengono modellati in base ai nodi di lavoro HDFS, che vengono riproposti per i nodi broker Kafka. Pertanto, se i nodi broker Kafka vengono eseguiti insieme ai nodi dati HDFS, HDFS perde lo storage efficace.

Di seguito sono riportati alcuni parametri comuni da ottimizzare durante l'impostazione di Kafka.

Funzioni da ottimizzare Parametri da adeguare
Memorizzazione messaggio Dimensione disco
Throughput client (produttore e consumatore) Capacità di rete
Throughput producer I/O su disco
Throughput consumer Memoria

Questi parametri variano da caso a caso e devono essere impostati con attenzione per ottenere prestazioni migliori. Nessuna impostazione singola adatta a tutti i casi d'uso.

ZooKeeper

ZooKeeper è un componente importante di un cluster Kafka che funge da servizio di coordinamento distribuito. ZooKeeper è incaricata di monitorare e preservare i metadati del cluster, coordinare le operazioni di molti nodi e garantire la stabilità e la coerenza generali del cluster Kafka.

I cluster HA di Big Data Service includono tre host Zookeeper. Tuttavia, per casi d'uso di produzione più grandi, si consiglia di ridimensionare orizzontalmente gli host Zookeeper in quanto vengono condivisi tra altri servizi con il cluster Big Data Service.

Considerazioni sulle prestazioni

Kafka è ottimizzato fuori dagli schemi. Tuttavia, è necessario eseguire alcune operazioni di tuning per migliorare le prestazioni del cluster. Considerare due metriche principali:

  • Throughput: il numero di messaggi che arrivano in un determinato periodo di tempo.
  • Latenza: la quantità di tempo necessaria per elaborare ogni messaggio.

Broker di tuning

È possibile controllare il numero di partizioni in un argomento. L'aumento del numero di partizioni e del numero di broker in un cluster porta ad un aumento del parallelismo del consumo dei messaggi, che a sua volta migliora il throughput di un cluster Kafka. Tuttavia, aumenta anche il tempo necessario per replicare i dati tra i set di repliche.

Produttori tuning

È possibile eseguire un producer in due modalità diverse: sincrona e asincrona. In modalità sincrona, non appena viene pubblicato un messaggio, il produttore invia una richiesta al broker. Pertanto, se stai producendo 100 messaggi al secondo, il produttore invia 100 richieste al secondo al broker. Ciò riduce il throughput e funge da operazione di blocco. Quindi, quando si pubblica un numero elevato di messaggi, è meglio eseguire i produttori in modalità asincrona.

In modalità asincrona, è necessario eseguire il tuning di due parametri per ottenere le migliori prestazioni: batch.size e linger.ms (tempo di latenza). La dimensione del batch è la dimensione dei dati da inviare in un batch, misurata in byte. Ad esempio, se si imposta la dimensione batch su 100, il producer attende che i messaggi aggiungano fino a 100 byte prima di effettuare una chiamata al broker. Se la produzione dei messaggi è bassa e si imposta una dimensione batch elevata, il producer attende molto tempo prima di produrre i messaggi. Ciò riduce il throughput e aumenta la latenza di consegna dei messaggi. Pertanto, a seconda del numero di messaggi prodotti, questo valore deve essere ottimizzato. La dimensione batch predefinita è 16.384.

Linger time è un'altra metrica basata su quando un produttore decide di inviare una richiesta a un broker. Utilizzando l'esempio precedente, se la dimensione del batch è impostata su 100 byte e si stanno producendo solo 50 byte al secondo, il producer deve attendere due secondi prima di pubblicare tali messaggi. Per evitare questo ritardo, è possibile regolare il tempo di permanenza (misurato in millisecondi) per garantire che il produttore non aspetti troppo tempo prima di inviare i messaggi. L'impostazione del tempo di permanenza a 500 ms in questo esempio fa attendere al massimo mezzo secondo al produttore.

La compressione può anche migliorare la latenza. Per impostazione predefinita, i messaggi Kafka non vengono compressi, ma è possibile configurare i producer in modo che vengano compressi. I broker e i consumatori hanno quindi il sovraccarico aggiuntivo di decomprimere i messaggi, ma la latenza complessiva dovrebbe essere ridotta in quanto la dimensione fisica dei dati trasmessi sulla rete è più piccola.

Ottimizzazione dei consumatori

I consumer ricevono messaggi in batch, in modo simile alla modalità di pubblicazione dei producer in batch. Se tiri molti messaggi e prendi molto tempo per elaborarli, il throughput ne risente. Allo stesso modo, se esegui il polling del broker per un singolo messaggio ogni volta, il numero di richieste al broker potrebbe diminuire il throughput.

Avere più partizioni e consumatori all'interno di un gruppo di consumer può contribuire a migliorare il throughput. Ma ricorda che con l'aumentare del numero di consumatori, aumenta anche il numero di richieste di commit offset al broker. Poiché il commit di un offset consiste nell'invio di un messaggio Kafka a un argomento interno, ciò aumenta indirettamente il carico sul broker. Pertanto, avere un numero ottimale di consumatori è fondamentale.

MirrorMaker Ottimizzazione delle prestazioni

Kafka MirrorMaker è uno strumento utilizzato per eseguire il mirroring dei messaggi Kafka da un data center o da un cluster a un altro. Poiché questo sta producendo internamente messaggi a Kafka, la maggior parte delle tecniche di ottimizzazione già discusse sono vere anche qui. Poiché questo comporta anche la trasmissione di messaggi su lunghe distanze, sono disponibili alcuni parametri di configurazione che possono essere ottimizzati per prestazioni migliori.

Nota

Durante il tuning, assicurarsi di basare le azioni sulle esigenze del caso d'uso aziendale.
  • MirrorMaker2 Posizione: MirrorMaker può essere installato nell'origine o nella destinazione. Tuttavia, si consiglia di installare a destinazione perché la produzione di messaggi su lunghe distanze aumenta le possibilità di perdere dati durante la trasmissione.
  • Compressione: per impostazione predefinita, la compressione dei messaggi nei producer Kafka è impostata su Nessuna. Tuttavia, per comprimere i messaggi che escono dall'origine alla destinazione, modificare la compressione in gzip. Questo, aiuta con dimensioni batch più grandi.
  • Dimensione batch: l'aumento della dimensione batch dei messaggi aumenta il throughput. La combinazione di questo con la compressione assicura che un gran numero di messaggi vengono trasmessi rapidamente. Se la dimensione del batch di destinazione richiede più tempo del tempo di permanenza configurato, i batch inviati non vengono completamente riempiti. Ciò riduce l'efficienza di compressione e spreca la larghezza di banda. Pertanto, è importante ottimizzare le dimensioni del batch insieme a consentire la compressione e il tuning.
  • Linger Time: aumentare il tempo di permanenza per consentire il riempimento completo dei lotti è importante. Ciò potrebbe aumentare la latenza, ma il throughput complessivo migliora. È necessario considerare l'importanza della latenza per il caso d'uso aziendale.
  • Aumenta parallelismo: per aumentare ulteriormente il throughput, è possibile distribuire più istanze di MirrorMaker nello stesso gruppo di consumer. Ciò facilita la ricezione di più consumer MirrorMaker dalla stessa origine e la produzione alla destinazione in parallelo.

Configurazioni server di produzione nel tuning Kafka

È possibile eseguire il tuning di diversi altri parametri di configurazione per migliorare le prestazioni di Kafka in un ambiente di produzione. I parametri riportati di seguito migliorano le prestazioni di replica dei messaggi all'interno delle partizioni.

  • num.replica.fetchers: specifica il numero di thread utilizzati per replicare i messaggi dal leader ai follower. Un numero maggiore di fetcher di replica migliora il parallelismo nella replica.
  • replica.fetch.max.bytes: indica il numero di byte di dati da recuperare dal leader. Un numero maggiore indica un chunk più grande di dati recuperati, migliorando il throughput della replica.
  • num.partitions: specifica il numero massimo di consumer che un argomento può avere in un gruppo di utenti specifico, che è uguale al numero di partizioni disponibili in tale argomento. Aumentare le partizioni aumenta il parallelismo e quindi il throughput. Tuttavia, molte partizioni consumano anche più risorse, quindi è necessario eseguire lo scale up anche delle risorse.

Bilanciamento dei cluster Apache Kafka

Ogni volta che un nuovo broker viene aggiunto a un cluster Kafka, le partizioni esistenti non vengono distribuite tramite il nuovo broker. Ciò significa che il nuovo broker non è occupato e se uno o più vecchi broker scendono, la replica e i potenziali leader vengono ridotti. Questo è noto come leader distorsione. Puoi evitare questo facendo in modo che qualsiasi broker appena aggiunto ottenga una quota delle partizioni. Il ribilanciamento del cluster è importante. Allo stesso modo, se un broker ha più del numero medio di partizioni per un argomento, noto come deviazione del broker, può portare a problemi di prestazioni.

Ottimizzazione delle prestazioni di Kafka

Quando si esegue Kafka come cluster, esistono diversi modi per ottimizzarne le prestazioni. È possibile ottimizzare vari parametri di configurazione per trovare un equilibrio tra throughput e latenza. L'ingegneria è impegnata a calcolare i valori migliori per alcuni di questi parametri, come il tempo di permanenza, la dimensione del batch, il numero di partizioni e così via. A seconda del caso d'uso, è possibile decidere che il throughput sia più importante della latenza, che la latenza sia più importante del throughput o che sia preferibile un equilibrio tra i due.