FROM openjdk:11
#环境变量
ENV KAFKA_VERSION=3.1.0
ENV KAFKA_SCALA=2.13
ENV KAFKA_HOME=/opt/kafka
ENV PATH=${PATH}:${KAFKA_HOME}/bin
#作者及一些版本信息
LABEL author=yan.p
LABEL version=${KAFKA_VERSION}
LABEL description="这是一个k8s定制版kafka"
#下载kafka
RUN wget -O /tmp/kafka_${KAFKA_SCALA}-${KAFKA_VERSION}.tgz https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_${KAFKA_SCALA}-${KAFKA_VERSION}.tgz \
&& tar -zxvf /tmp/kafka_${KAFKA_SCALA}-${KAFKA_VERSION}.tgz -C /opt \
&& mv /opt/kafka_${KAFKA_SCALA}-${KAFKA_VERSION} ${KAFKA_HOME} \
&& rm -rf /tmp/kafka_${KAFKA_SCALA}-${KAFKA_VERSION}.tgz
#工作目录
WORKDIR ${KAFKA_HOME}
#暴露端口
EXPOSE 9092 9093
#复制启动脚本
COPY /kafka-docker/${KAFKA_VERSION}/entrypoint.sh /
#授权启动脚本
RUN ["chmod", "+x", "/entrypoint.sh"]
#执行启动脚本命令
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
####################kafka+zookeeper环境变量############################################
BROKER_ID=$(($(hostname | sed s/.*-//)))
#########################kafka+kraft环境变量############################################
#节点ID
NODE_ID=$(($(hostname | sed s/.*-//)))
#服务地址
SERVICE_ID=$(hostname -f)
#本机地址
LISTENERS="PLAINTEXT://$SERVICE_ID:9092,CONTROLLER://$SERVICE_ID:9093"
ADVERTISED_LISTENERS="PLAINTEXT://$SERVICE_ID:9092"
SERVICE_UUID="9dJzdGvfTPaCY4e8klXaDQ"
############################################服务器启动脚本################################
if [[ ${ZOOKEEPER_CONNECT} ]]; then
echo '开始执行zookeeper方式的kafka集群'
sed -e "s+^broker.id=.*+broker.id=$BROKER_ID+" \
-e "s+^zookeeper.connect=.*+zookeeper.connect=${ZOOKEEPER_CONNECT}+" \
-e "s+^log.dirs=.*+log.dirs=${KAFKA_HOME}/data/$BROKER_ID+" \
${KAFKA_HOME}/config/server.properties > server.properties.updated \
&& mv server.properties.updated ${KAFKA_HOME}/config/server.properties \
&& rm -rf server.properties.updated
exec ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties
elif [[ ${CONTROLLER_QUORUM_VOTERS} ]]; then
echo '开始执行kraft方式的kafka集群'
#mkdir -p ${KAFKA_HOME}/data/$NODE_ID
sed -e "s+^node.id=.*+node.id=$NODE_ID+" \
-e "s+^listeners=.*+listeners=$LISTENERS+" \
-e "s+^advertised.listeners=.*+advertised.listeners=$ADVERTISED_LISTENERS+" \
-e "s+^controller.quorum.voters=.*+controller.quorum.voters=${CONTROLLER_QUORUM_VOTERS}+" \
-e "s+^log.dirs=.*+log.dirs=${KAFKA_HOME}/data/$NODE_ID+" \
${KAFKA_HOME}/config/kraft/server.properties > server.properties.updated \
&& mv server.properties.updated ${KAFKA_HOME}/config/kraft/server.properties \
&& rm -rf server.properties.updated
${KAFKA_HOME}/bin/kafka-storage.sh format -t ${SERVICE_UUID} -c ${KAFKA_HOME}/config/kraft/server.properties
exec ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/kraft/server.properties
else
echo '这里没有启动任何集群'
tail -f /dev/null
fi
app-zk.app:2181/kafka
[email protected]:9093,[email protected]:9093,[email protected]:9093
Content type
Image
Digest
Size
402.8 MB
Last updated
over 4 years ago
docker pull ydockerp/kafka