Я видел ветку, в которой говорится, что API Kafka не поддерживает эту функциональность, поэтому я сделал собственный. sh скрипт для создания пользователей (create-user. sh):
#!/bin/bash
SERVER=$1
USER=$2
PASSWORD=$3
if [ "x$SERVER" = "x" ] || [ "x$USER" = "x" ] || [ "x$PASSWORD" = "x" ]; then
echo "usage: $0 <server:port> <user> <password>"
exit
fi
bin/kafka-configs.sh --zookeeper $SERVER --alter --add-config "SCRAM-SHA-512=[password=$PASSWORD]" --entity-type users --entity-name $USER
И я вызываю его из программы java:
ProcessBuilder pb = new ProcessBuilder("./create-user.sh", "zookeeper-server", "sampleUser", "password");
pb.environment().put("PATH", "/home/myHome/Programs/java/jdk-13.0.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
Process p = pb.redirectErrorStream(true)
.directory(new File("/home/myHome/Desktop/Kafka/kafka_2.12-2.4.1"))
.start();
Обратите внимание, мне нужно было указать некоторые каталоги в PATH и передать их как переменную среды в ProcessBuilder, потому что в противном случае она выдаст ошибки говоря, что есть команды, которые не могут найти