Я пытаюсь настроить кластер Kafka для одного брокера на узел с помощью Docker. Идея состоит в том, что несколько Docker-контейнеров будут содержать каждого брокера, и у меня будет другой Docker-контейнер в качестве узла Zookeeper. Я создаю образ, где я могу передать адрес zookeeper и идентификатор брокера в качестве переменных среды, которые будут использоваться для запуска брокера. Это будет полезно для вызова нескольких узлов с разными идентификаторами брокера, просто передавая их как переменные env, когда я запускаю контейнер из образа.
Это мой докер-файл:
FROM openjdk:8
RUN mkdir /kafka
WORKDIR /kafka
COPY kafka_2.12-2.3.0 kafka_2.12-2.3.0
COPY cmd.sh cmd.sh
RUN cat /etc/os-release
RUN chmod +x ./cmd.sh
CMD ["./cmd.sh"]
EXPOSE 9092
А это мой cmd.sh
#!/bin/sh
export KAFKA_DIR=/kafka/kafka_2.12-2.3.0
if [[ -z $KAFKA_BROKER_ID || -z $KAFKA_ZOOKEEPER_ADDRESS ]]; then
echo 'Zookeeper address and broker id need to be set by env variables KAFKA_ZOOKEEPER_ADDRESS and KAFKA_BROKER_ID'
exit 1
fi
echo "Broker ID: ${KAFKA_BROKER_ID}"
echo "Zookeeper addresss: ${KAFKA_ZOOKEEPER_ADDRESS}"
"${KAFKA_DIR}"/bin/kafka-server-start.sh "${KAFKA_DIR}"/config/server.properties --override broker.id="${KAFKA_BROKER_ID}" --override zookeeper.connect="${KAFKA_ZOOKEEPER_ADDRESS}"
Я получил это из вопроса Как проверить, определены ли несколько переменных в bash
Я ожидаю увидеть сообщение об ошибке, но вместо этого получаю следующее:
./cmd.sh: 5: ./cmd.sh: [[: not found ./cmd.sh: 5: ./cmd.sh: -z: not
found Broker ID: Zookeeper addresss: [2019-07-03 08:56:04,172] INFO
Registered kafka:type=kafka.Log4jController MBean
(kafka.utils.Log4jControllerRegistration$) [2019-07-03 08:56:04,752]
ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
org.apache.kafka.common.config.ConfigException: Invalid value for
configuration broker.id: Not a number of type INT