Eu tenho uma máquina Ubuntu 16.04 onde o Apache Kafka está instalado. Atualmente, posso fazê-lo funcionar perfeitamente usando um start_kafka.sh
script com o seguinte conteúdo:
JMX_PORT=17264 KAFKA_HEAP_OPTS="-Xms1024M -Xmx3072M" /home/kafka/kafka_2.11-0.10.1.0/bin/kafka-server-start.sh -daemon /home/kafka/kafka_2.11-0.10.1.0/config/server.properties
Agora, quero usar supervisor
para reiniciar automaticamente o processo caso ele falhe e inicie imediatamente após a reinicialização da máquina. O problema é que não consigo supervisor
iniciar o Kafka.
Eu instalei supervisor
usando pip
e coloquei este arquivo de configuração em /etc/supervisord.conf
:
; Supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[program:kafka]
command=/home/kafka/kafka_2.11-0.10.1.0/start_kafka.sh ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
startsecs=10 ; # of secs prog must stay up to be running (def. 1)
startretries=3 ; max # of serial start failures when starting (default 3)
;autorestart=unexpected ; when to restart if exited after running (def: unexpected)
;exitcodes=0,2 ; 'expected' exit codes used with autorestart (default 0,2)
stopsignal=TERM ; signal used to kill process (default TERM)
stopwaitsecs=180 ; max num secs to wait b4 SIGKILL (default 10)
stdout_logfile=NONE ; stdout log path, NONE for none; default AUTO
;environment=A="1",B="2" ; process environment additions (def no adds)
Quando tento iniciar o Kafka, ocorre o seguinte erro:
# supervisorctl start kafka
kafka: ERROR (spawn error)
E o log do supervisor (em /tmp/supervisord.log
) contém isto:
2017-01-23 22:10:24,532 INFO spawned: 'kafka' with pid 21311
2017-01-23 22:10:24,536 INFO exited: kafka (exit status 127; not expected)
2017-01-23 22:10:25,542 INFO spawned: 'kafka' with pid 21312
2017-01-23 22:10:25,559 INFO exited: kafka (exit status 127; not expected)
2017-01-23 22:10:27,562 INFO spawned: 'kafka' with pid 21313
2017-01-23 22:10:27,567 INFO exited: kafka (exit status 127; not expected)
2017-01-23 22:10:30,571 INFO spawned: 'kafka' with pid 21314
2017-01-23 22:10:30,576 INFO exited: kafka (exit status 127; not expected)
2017-01-23 22:10:31,578 INFO gave up: kafka entered FATAL state, too many start retries too quickly
Deve-se dizer que já tentei remover o -daemon
sinalizador start_kafka.sh
para usar com supervisor
, mas sem sucesso.
Alguém tem alguma ideia do que está acontecendo?
Finalmente consegui que o supervisor trabalhasse com Kafka com duas mudanças:
-daemon
sinalizador, pois o supervisor requer um processo não daemozine para gerenciarEsta é a configuração de trabalho:
start_kafka.sh
supervisord.conf