Sign inSign up

ydockerp/kafka

By ydockerp

•Updated over 4 years ago

k8s定制版kafka镜像

Image
1

3.0K

ydockerp/kafka repository overview

⁠k8s定制版kafka镜像

⁠Dockerfile

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"]

⁠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

⁠环境变量的说明

  • ZOOKEEPER_CONNECT:zookeeper端访问地址的方式使用,这里要填写zookeeper集群的客户
app-zk.app:2181/kafka
  • CONTROLLER_QUORUM_VOTERS:raft的使用方式,这里要填写服务的集群访问地址,例如

Tag summary

Content type

Image

Digest

Size

402.8 MB

Last updated

over 4 years ago

docker pull ydockerp/kafka