#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"});