Tutorial di Apache Kafka: come installare e configurare il software
Il software open source Apache Kafka è tra le migliori soluzioni per il salvataggio e l’elaborazione di flussi di dati. La piattaforma di messaggistica e streaming, distribuita con la licenza Apache 2.0, convince gli utenti per la tolleranza agli errori, l’incredibile scalabilità e la velocità di lettura e scrittura. La base di queste applicazioni che trattano grandi quantità di dati, nonché caratteristica interessante, è il cluster, che permette di distribuire e replicare i dati separatamente. Le diverse interfacce rendono possibile la comunicazione con il cluster, mentre un semplice protocollo TCP funge da base di intesa.
In questo tutorial di Kafka spieghiamo i primi passi da compiere con questa applicazione scritta in Scala, a partire dall’installazione di Kafka e di Apache ZooKeeper, il software necessario per il suo utilizzo.
Requisiti per l’utilizzo di Apache Kafka
Per un utilizzo efficiente dei cluster di Kafka è necessario lavorare con l’hardware adeguato. Il team di sviluppatori consiglia l’utilizzo di processori Intel Xeon con Quad-Core e 24 Gigabyte di memoria RAM. L’elemento più importante è comunque avere una memoria sufficiente per salvare in un buffer i messaggi letti e scritti da tutte le applicazioni che hanno accesso attivo al cluster. Poiché uno dei vantaggi di Apache Kafka è proprio l’elevato flusso di dati, è di enorme importanza scegliere dischi rigidi adeguati. La Apache Software Foundation consiglia unità hard-disk SATA (8 x 7200 UpM); per prevenire carenze di prestazione si applica il principio “più dischi rigidi si hanno, meglio è”.
Anche per quel che riguarda il software bisogna rispettare alcune condizioni per poter utilizzare Apache Kafka per la gestione di flussi di dati in entrata e in uscita. Per la scelta del sistema operativo, ad esempio, conviene prediligere un sistema Unix come Solaris o una distribuzione Linux, visto che le piattaforme di Windows offrono un supporto limitato. Poiché Apache Kafka è scritto nel linguaggio Scala compilato da Java è indispensabile che sia installata sul proprio sistema una versione più attuale possibile del Java SE Development Kits (JDK).
Lo stesso, tra le varie cose, contiene il run-time system di Java, indispensabile per l’esecuzione delle applicazioni Java. Un’altra componente obbligatoria è il servizio Apache ZooKeeper, che permette la sincronizzazione di processi ripartiti.
Tutorial di Apache Kafka: ecco come installare Kafka, ZooKeeper e Java
Nella parte precedente di questo tutorial di Kafka abbiamo spiegato le componenti software indispensabili. Se non ancora presente sul vostro sistema, conviene partire dall’installazione del run-time system di Java. Molte versioni aggiornate di distribuzioni Linux, come Ubuntu, che in questo tutorial di Apache Kafka funge da sistema operativo di esempio (versione 17.10), con OpenJDK hanno già a disposizione un’implementazione JDK gratuita nel repository ufficiale del pacchetto. Potrete installare facilmente il kit di Java attraverso quest’ultimo, inserendo nel terminale il seguente comando:
sudo apt-get install openjdk-8-jdk
Non appena conclusa l’installazione di Java, potrete proseguire con l’installazione del servizio di sincronizzazione dei processi Apache ZooKeeper. Anche per quest’ultimo, il repository di Ubuntu mette a disposizione un pacchetto pronto all’uso eseguibile con l’interfaccia a riga di comando che segue:
sudo apt-get install zookeeperd
Con un altro comando potrete infine verificare se il servizio ZooKeeper è attivo:
sudo systemctl status zookeeper
Se Apache ZooKeeper funziona, il risultato apparirà come segue:
Se il sistema di sincronizzazione non funziona, potrete avviarlo in qualsiasi momento con questo comando:
sudo systemctl start zookeeper
Per far partire automaticamente ZooKeeper all’avvio del sistema, potete inserire ancora una voce di autostart:
sudo systemctl enable zookeeper
Infine potrete creare un profilo utente di Kafka, indispensabile per il successivo utilizzo del server. Riaprite nuovamente il terminale e inserite il seguente comando:
sudo useradd kafka -m
Con l’ausilio del password manager passwd potrete aggiungere una password abbinata all’utente, inserendo il seguente comando seguito dalla password desiderata:
sudo passwd kafka
Nella prossima fase potrete assegnare all’utente “kafka” i diritti sudo:
sudo adduser kafka sudo
Potrete eseguire il log in qualsiasi momento utilizzando il profilo utente appena creato:
su – kafka
A questo punto del tutorial è arrivato il momento di scaricare e installare Kafka. Svariate fonti affidabili permettono di scaricare sia le vecchie versioni che le più recenti del software di streaming ed elaborazione. Di prima mano riceverete direttamente i dati di installazione, ad esempio attraverso questa cartella di download della Apache Software Foundation. È altamente consigliato lavorare con una versione aggiornata di Kafka, per cui dovrete eventualmente adattare il seguente comando di download prima dell’inserimento nel terminale:
wget http://www.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
Poiché i file scaricati sono in formato compresso, nella prossima fase dovrete prima estrarli:
sudo tar xvzf kafka_2.12-2.1.0.tgz --strip 1
Con l’aiuto del parametro “--strip 1” assicuratevi che i file estratti vengano salvati direttamente nella cartella “~/kafka”. In caso contrario, sulla base della versione utilizzata in questo tutorial di Kafka, Ubuntu salverebbe tutti i dati nella cartella “~/kafka/kafka_2.12-2.1.0”. Prima però, con l'ausilio di mkdir, bisogna creare una cartella denominata “kafka” e averla cambiata (mediante “cd kafka”).
Kafka: tutorial per la configurazione del sistema di streaming e messaggistica
Dopo aver installato Apache Kafka e sia il run-time system di Java che ZooKeeper, dovreste poter eseguire in ogni momento il servizio di Kafka. Ma prima dovrete effettuare ancora alcune piccole configurazioni affinché il software sia impostato in maniera ottimale per i compiti successivi.
Attivare l’eliminazione di topic
Kafka permette, non nell’installazione standard però, di eliminare i topic, ossia le unità di salvataggio e categorizzazione di un cluster di Kafka. È possibile effettuare questa modifica facilmente nel file di configurazione di Kafka server.properties. Basta aprire questo file, che si trova nella cartella “config” con il seguente comando da terminale nell’editor di testo standard nano:
sudo nano ~/kafka/config/server.properties
Alla fine di questo file di configurazione inserite una nuova voce che permette l’eliminazione di topic di Kafka:
delete.topic.enable=true
Non dimenticate di salvare la nuova voce nel file di configurazione di Kafka, prima di chiudere l’editor nano!
Creare file .service per ZooKeeper e Kafka
Nella prossima fase di questo tutorial di Kafka, imparerete a creare file Unit per ZooKeeper e Kafka che permettono di eseguire azioni ordinarie come l’avvio, lo spegnimento e il riavvio di entrambi i servizi in maniera conforme su altri servizi Linux. Per questo è indispensabile creare e impostare per entrambe le applicazioni file .service per la suite di amministrazione systemd.
Creare il file ZooKeeper corrispondente per la suite di amministrazione systemd di Ubuntu
Dopo potete creare il file per il servizio di sincronizzazione di ZooKeeper, inserendo nel terminale il seguente comando:
sudo nano /etc/systemd/system/zookeeper.service
Così non viene soltanto creato il file, ma anche aperto subito nell’editor nano. Inserite le righe seguenti e salvate il file alla fine:
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Per questo motivo systemd è nella posizione di comprendere che ZooKeeper può essere riavviato soltanto quando la rete e il file di sistema sono pronti, come definito nella sezione [Unit]. Nel [Service] viene specificato che la suite di amministrazione deve utilizzare i file zookeeper-server-start.sh ozookeeper-server-stop.sh per l'avvio o l'arresto di ZooKeeper. Dopo viene definito un riavvio automatico per i casi di interruzione involontaria del servizio. La voce [Install] regola quando avviare il file, mentre “multi-user.target” rappresenta il valore standard per un sistema con più utenti (per es. un server).
Creare un file Kafka per la suite di amministrazione systemd di Ubuntu
Create il file .service per Apache Kafka con il seguente comando da terminale:
sudo nano /etc/systemd/system/kafka.service
Infine ricopiate il seguente contenuto nel nuovo file, già aperto nell’editor nano:
[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Nel reparto [Unit] di questo file viene specificata la dipendenza dei servizi di Kafka da ZooKeeper. In questo modo viene assicurato che il servizio di sincronizzazione potrà avviarsi soltanto al momento dell'esecuzione del file kafka.service. Nel[Service] sono inseriti i file della Shell kafka-server-start.sh e kafka-server-stop.sh per l'avvio o l'arresto del server di Kafka. In questo file si trovano anche la voce del riavvio automatico dopo una precedente interruzione della connessione e del sistema multi-utente.
Kafka: primo avvio e creazione di una voce di avvio automatico
Dopo aver creato con successo le voci della suite di amministrazione per Kafka e ZooKeeper, potrete avviare Kafka come segue:
sudo systemctl start kafka
Il programma systemd utilizza di base un protocollo centrale, ossia un journal, in cui vengono scritte automaticamente tutte le notifiche di log. In questo modo potrete verificare facilmente se il server di Kafka è stato avviato come desiderato:
sudo journalctl -u kafka
L’output dovrebbe avere più o meno questo aspetto:
Se l’avvio manuale di Apache Kafka funziona, potete attivare infine ancora l’avvio automatico nel boot di sistema:
sudo systemctl enable kafka
Primi passi con Apache Kafka
Per testare Apache Kafka a questo punto del tutorial va elaborato un primo messaggio con l’aiuto della piattaforma di messaggistica. A tal fine avrete bisogno di un produttore e di un consumatore, ossia di un’istanza che permetta la scrittura e la pubblicazione di dati in topic e di un’istanza che permetta di leggere i dati di un topic. Create prima di tutto il topic, che in questo caso dovrà contenere il nome TutorialTopic. Poiché si tratta di un semplice topic di prova, dovrà contenere soltanto una singola partizione e una singola replica.
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
Successivamente dovrete creare un produttore che inserirà nel topic appena creato il primo messaggio di prova “Ciao mondo!”. Per questo scopo utilizzerete lo script di Shell kafka-console-producer.sh, che prevede il nome dell’host e la porta del server (nell’esempio: percorso standard di Kafka) e anche il nome del topic come argomento:
echo "ciao mondo!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
Con l'aiuto dello script kafka-console-consumer.sh create infine un consumatore di Kafka, che rielabora e riporta i messaggi del TutorialTopic. Come argomenti sono richiesti il nome dell’host, la porta del server di Kafka e il nome del topic. Inoltre viene allegato l’argomento “--from-beginning”, affinché il messaggio “Ciao mondo!”, pubblicato in questo caso ancora prima dell’avvio da parte del consumatore, possa essere anche elaborato da quest’ultimo:
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic--from-beginning
Come conseguenza, il terminale presenta il messaggio “ciao mondo!”, in cui lo script continua a funzionare in attesa di altri messaggi, che verranno pubblicati nel topic di prova. Quindi attraverso il produttore potrete occuparvi di altri dati in uscita in un’altra finestra del terminale, che dovreste visualizzare anche nella finestra del terminale in cui viene eseguito lo script del consumatore.