#java #bash #apache-kafka
#java #bash #apache-kafka
Вопрос:
У меня есть следующая команда для запуска через мою Java-программу;
./kafka-topics.sh —zookeeper zk1.xx.com: 2181,zk2.xx.com: 2181,zk3.xx.com:2181 —удалить —тема testTopic
Я вызываю этот скрипт bash следующим образом;
ProcessBuilder builder = new ProcessBuilder(CConstants.KAFKA_TOPIC_SH);
builder.command("--zookeeper","zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181",
"--delete", "--topic", "testTopic");
builder.start();
Но я получаю следующую ошибку;
java.io.IOException: Cannot run program "--zookeeper": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[?:1.8.0_66]
at
Как я могу запустить скрипт bash с параметрами?
Здесь
- —zookeeper,—delet,e —topic являются аргументами
- Другие являются параметрами для этих параметров
Ответ №1:
Ошибка, которую вы получаете, показывает, что ваш первый параметр интерпретируется как имя команды. Попробуйте это:
ProcessBuilder builder = new ProcessBuilder();
builder.command(CConstants.KAFKA_TOPIC_SH,"--zookeeper","zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181",
"--delete", "--topic", "testTopic");
builder.start();
Ответ №2:
при вызове метода command вы перезаписываете команду, переданную конструктору ProcessBuilder . Существует вариант конструктора vararg, в котором вы также можете передавать аргументы команды:
new ProcessBuilder(CConstants.KAFKA_TOPIC_SH, "--zookeeper",
"zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181", "--delete", "--topic", "testTopic")
.start();
Ответ №3:
вы можете напрямую вызвать API Kafka вместо инкапсуляции команды Java в скрипт bash. Например,
String[] options = new String[]{
«—create»,
«—zookeeper»,
«zk_host:port»,
«—partitions»,
«1»,
«—topic»,
«test»,
«—replication-factor»,
«1» };
TopicCommand.main(параметры);
Комментарии:
1. Можете ли вы привести пример для удаления темы?
2. String[] options = новая строка[]{ «—delete», «—zookeeper», «zk-host:port», «—topic», «your_topic_name»}; TopicCommand.main(параметры);
3. Спасибо, работает отлично. Я спросил из списка пользователей kafka, они предложили использовать скрипт bash.