supervisord: Don't start a program before another one is running
You can't do this, as far as I know. See this issue: https://github.com/Supervisor/supervisor/issues/122
One commenter there suggests having all your programs as autostart = false, except just one, that has the responsibility for bringing all the others up (using supervisorctl, or the API, I guess) in the right order.
I'm not sure supervisor can ensure that but try to specify Zookeeper's priority lower than Kafka's, something like this:
[program:Zookeeper]
command=xx
priority=1
autostart = true
autorestart = true
[program:Kafka]
command=yy
priority=999
autostart = true
autorestart = true