este problema se puede resolver de diferentes formas, sin embargo te mostramos la que en nuestra opinión es la respuesta más completa.
Solución:
Así es como configuro Kafka para que se inicie automáticamente en Ubuntu 14.04:
sudo su
cp -R ~/kafka_2.11-0.10.0.1 /opt
ln -s /opt/kafka_2.11-0.10.0.1 /opt/kafka
Copie el siguiente script de inicio en /etc/init.d/kafka:
DAEMON_PATH=/opt/kafka/
PATH=$PATH:$DAEMON_PATH/bin
# See how we were called.
case "$1" in
start)
# Start daemon.
echo "Starting Zookeeper";
nohup $DAEMON_PATH/bin/zookeeper-server-start.sh -daemon /$DAEMON_PATH/config/zookeeper.properties 2> /dev/null &&
echo "Starting Kafka";
nohup $DAEMON_PATH/bin/kafka-server-start.sh -daemon /$DAEMON_PATH/config/server.properties 2> /dev/null
;;
stop)
# Stop daemons.
echo "Shutting down Zookeeper";
pid=`ps ax | grep -i 'org.apache.zookeeper.server' | grep -v grep | awk 'print $1'`
if [ -n "$pid" ]
then
kill -9 $pid
else
echo "Zookeeper was not Running"
fi
echo "Shutting down Kafka";
pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk 'print $1'`
if [ -n "$pid" ]
then
kill -9 $pid
else
echo "Kafka was not Running"
fi
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
pid=`ps ax | grep -i 'org.apache.zookeeper.server' | grep -v grep | awk 'print $1'`
if [ -n "$pid" ]
then
echo "Zookeeper is Running as PID: $pid"
else
echo "Zookeeper is not Running"
fi
pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk 'print $1'`
if [ -n "$pid" ]
then
echo "Kafka is Running as PID: $pid"
else
echo "Kafka is not Running"
fi
;;
*)
echo "Usage: $0 start"
exit 1
esac
exit 0
Realice el servicio kafka con estos comandos:
chmod 755 /etc/init.d/kafka
update-rc.d kafka defaults
Ahora debería poder iniciar y detener el servicio kafka de esta manera:
sudo service kafka start
sudo service kafka status
sudo service kafka stop
Si desea eliminar el servicio Kafka más tarde, ejecute update-rc.d -f kafka remove
.
Descarga Kafka
cd /opt
sudo wget http://mirror.hosting90.cz/apache/kafka/2.5.0/kafka-2.5.0-src.tgz
sudo tar -zxvf kafka-2.5.0-src.tgz
sudo mv kafka-2.5.0-src kafka
sudo rm kafka-2.5.0-src.tgz
cd kafka
sudo ./gradlew jar -PscalaVersion=2.11.12
Instalar Zookeeper
sudo vi /etc/systemd/system/zookeeper.service
Editar zookeeper.service
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=root
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Iniciar Zookeeper
sudo systemctl enable zookeeper.service
sudo systemctl start zookeeper.service
sudo systemctl status zookeeper.service
activo (corriendo)
Instalar Kafka
sudo vi /etc/systemd/system/kafka.service
Editar kafka.service
[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=root
ExecStart=/bin/sh -c '/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /opt/kafka/kafka.log 2>&1'
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Iniciar Kafka
sudo systemctl enable kafka.service
sudo systemctl start kafka.service
sudo systemctl status kafka.service
activo (corriendo)
Prueba las obras de Kafka
crear tema
sudo bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test-topic
poner mensajes al tema
sudo bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic
> test message1
> test messate2
^C
leer mensajes del tema
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test-topic
test message1
test messate2
^C
Un enfoque sencillo es utilizar systemd. Debe tener en cuenta que al inicio las variables de entorno como JAVA_HOME aún no están cargados, por lo que debemos introducirlos en el sistema. Una buena solución es crear un archivo llamado profile
y agregue toda la variable necesaria a eso:
# /home/kafka/profile
JAVA_HOME=/opt/jdk8
KAFKA_HOME=/opt/kafka
Suponiendo que haya instalado Kafka en la ruta /opt/kafka
, para que Kafka se ejecute automáticamente después del inicio de Ubuntu (probado en Ubuntu 16.04 y centOS7 y supongo que funciona en cualquier distribución con el soporte del systemd) haga el siguiente comando:
sudo nano /etc/systemd/system/kafka.service # open file to add service informations
Ahora agregue el siguiente contenido al archivo
[Unit]
Description=Kafka Daemon
Wants=syslog.target
# suppose you have a service named zookeeper that it start zookeeper and we want Kafka service run after the zookeeper service
After=zookeeper.service
[Service]
Type=forking
# the user whom you want run the Kafka start and stop command under
User=kafka
# the file path that contains envirnment variables
EnvironmentFile=/home/kafka/profile
# the directory that the commands will run there
WorkingDirectory=/home/kafka/
# Kafka server start command
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
# Kafka server stop command
ExecStop=/opt/kafka/bin/kafka-server-stop.sh -daemon
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=multi-user.target
Nota: Como Kafka necesita que el cuidador del zoológico lo conecte a la hora de inicio, supuse que también tenemos un servicio de cuidador del zoológico y configuré el servicio de Kafka para que se ejecute después de que se inicie el servicio de cuidador del zoológico.
Ahora, después de guardar el kafka.service
, simplemente ejecute el siguiente comando para crear un enlace del servicio Kafka y se iniciará cada vez que reinicie el sistema operativo:
sudo systemctl enable kafka
Ahora puede iniciar el servicio Kafka usando el comando:
sudo systemctl start kafka.service
y comprobar el estado del servicio:
sudo systemctl status kafka.service
Finalizando este artículo puedes encontrar las notas de otros sys admins, tú de igual forma tienes la habilidad dejar el tuyo si dominas el tema.