Как выполнить файл zookeeper-server-start .bat из моей java-программы?

#java #apache-kafka #apache-zookeeper

#java #apache-kafka #apache-zookeeper

Вопрос:

Я пытаюсь раскрутить серверы zookeeper и kafka из моего Java-кода. Обычно мы выполняем пакетные файлы вручную, я пытаюсь автоматизировать, но сервер никогда не запускается.

Я пробовал запускать другие файлы .bat, используя тот же код, и они работают как шарм, но zookeeper и kafka-server никогда не выполняются успешно и не выдают никаких ошибок

 Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/zookeeper-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/zookeeper.properties"});
 

Я хочу, чтобы сервер zookeeper запустился и оставался запущенным, тогда как это не так. Пожалуйста, помогите, где я ошибаюсь, возможно ли это вообще?

Комментарии:

1. Есть ли какая-либо особая причина для попытки сделать это с помощью Java?

2. У меня возникли проблемы с тестированием потоков Kafka, используя встроенные серверы kafka, документация которых тоже довольно расплывчата. Итак, я планирую запустить свой собственный локальный сервер для целей тестирования.

Ответ №1:

Приведенная ниже программа сработала для меня, она выведет все журналы на консоль и будет ждать завершения процесса:

 import java.io.*;
public class ExecuteProg {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c",
                    "E:/Softwares/kafka_2.11-2.0.0/bin/windows/zookeeper-server-start.bat",
                    "E:/Softwares/kafka_2.11-2.0.0/config/zookeeper.properties"});
            BufferedReader in = new BufferedReader(
                                new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

Комментарии:

1. Спасибо @Mukesh. Добавление флага «пуск» и предоставление абсолютных путей для обоих файлов, казалось, решило мою проблему.

Ответ №2:

Я точно не знаю, почему, но добавление флага «пуск» заставило его работать на меня. Теперь я могу запускать как серверы zookeeper, так и kafka из кода. Код, который я использую, выглядит следующим образом,

 Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "start",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/zookeeper-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/zookeeper.properties"});

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "start",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/kafka-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/server.properties"});