Visto che di recente ho installato Kafka su Docker Desktop, condivido una semplice guida per arrivare ad averlo funzionante in qualche minuto.
Installazione di Kafka tramite Docker Compose
- Installare Docker Desktop per Windows.
- Registrarsi a Docker Hub se non si ha già un account.
- Effettuare tramite Docker Desktop il login su Docker Hub (clic destro sull’icona nella system tray).
- Per evitare che si verifichino errori durante la build in ambiente Windows, dalla git bash eseguire:
git config --global core.autocrlf false
- Effettuare con git il clone del repository https://github.com/wurstmeister/kafka-docker.git.
- Aprire il file docker-compose-single-broker.yml e impostare nella variabile d’ambiente KAFKA_ADVERTISED_HOST_NAME il valore kafkaserver.
- Nel file host di Windows aggiungere la riga:
127.0.0.1 kafkaserver
- Con la powershell di Windows (per aprirla tasto Windows + x) posizionarsi nella cartella git clonata ed eseguire il comando:
docker-compose -f .\docker-compose-single-broker.yml up
Attendere che il processo di installazione e avvio termini.
Test dell’installazione
- Scaricare https://downloads.apache.org/kafka/2.6.0/kafka_2.12-2.6.0.tgz ed estrarre il contenuto.
- Portarsi nella cartella kafka_2.12-2.6.0\bin\windows sempre con la Powershell ed eseguire il comando per creare un topic:
.\kafka-topics.bat --create --topic test-events --bootstrap-server localhost:9092
Nel caso vi ritorni l’errore: “The input line is too long. The syntax of the command is incorrect.” accorciare il path rinominando le cartelle.
- Eseguire il comando per creare messaggi nel topic creato:
.\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test-events --from-beginning
La shell si bloccherà in attesa di messaggi dal producer
- Aprire un’altra Powershell nella stessa cartella ed eseguire il comando:
.\kafka-console-producer.bat --bootstrap-server localhost:9092 --topic test-events
Scrivere del testo e premere invio. Nell’altra shell del consumer si vedranno comparire i messaggi appena scritti dal producer.