龙空技术网

从 Dockerfile 开始一步一步完成 Kafka 容器化

马士兵教育 354

前言:

当前兄弟们对“apachedockerfile例子”大体比较关注,同学们都想要了解一些“apachedockerfile例子”的相关文章。那么小编同时在网摘上网罗了一些关于“apachedockerfile例子””的相关资讯,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

从 Dockerfile 开始一步一步完成 Kafka 容器化

Apache Kafka 容器化解决方案以及部署案例。

从零开始,自己编写 Dockerfile, 打包容器镜像,并开发了 helm chart 实现 k8s 快速部署。

项目特色:

全面兼容 KRaft, 不依赖 ZooKeeper灵活使用环境变量进行配置覆盖提供 helm chart,支持 kubernetes 集群外访问

相关链接:

GitHubDocker HubDockerfile初始化脚本 entrypoint.shDockerfile

Dockerfile复制代码# builderFROM alpine as builderARG kafka_version=3.3.2ARG scala_version=2.13ENV dl_url="{kafka_version}/kafka_${scala_version}-${kafka_version}.tgz"RUN set -ex \  ; mkdir -pv /tmp/kfk \  ; wget "$dl_url" -O /tmp/kfk/kafka.tgz \  ; cd /tmp/kfk && tar -xf kafka.tgz \  ; rm -f /tmp/kfk/kafka.tgz \  ; mv kafka_* kafka# containerFROM eclipse-temurin:17-jre-focalENV KAFKA_HOME="/opt/kafka" \    KAFKA_CONF_FILE="/etc/kafka/server.properties"RUN set -ex \  ; useradd kafka --uid 1000 -m -s /bin/bash \  ; usermod -g root kafka \  ; mkdir -pv "/etc/kafka" && chown -R 1000:1000 "/etc/kafka"COPY --from=0 --chown=1000:1000 /tmp/kfk/kafka "$KAFKA_HOME"COPY entrypoint.sh /entrypoint.shWORKDIR $KAFKA_HOMEEXPOSE 9092# USER 1000ENTRYPOINT [ "/entrypoint.sh" ]CMD [ "start" ]
Docker 部署
shell复制代码## broker 默认端口 9092docker run -d --name kafka-server \  --network host \  sir5kong/kafka:v3.3

自定义端口号:

shell复制代码## 自定义端口号docker run -d --name kafka-server \  --network host \  --env KAFKA_CONTROLLER_LISTENER_PORT=29091 \  --env KAFKA_BROKER_LISTENER_PORT=29092 \  sir5kong/kafka:v3.3

启动 kafka server 并持久化数据目录:

shell复制代码docker volume create kafka_datadocker run -d --name kafka-server \  --network host \  -v kafka_data:/opt/kafka/data \  sir5kong/kafka:v3.3
Docker Compose
yaml复制代码version: "3"volumes:  kafka-data: {}## broker 默认端口 9092## bootstrap-server: ${KAFKA_HOST_IP_ADDR}:9092services:  kafka:    image: sir5kong/kafka:v3.3    # restart: always    network_mode: host    volumes:      - kafka-data:/opt/kafka/data    environment:      - KAFKA_HEAP_OPTS=-Xmx512m -Xms512m      #- KAFKA_CONTROLLER_LISTENER_PORT=19091      #- KAFKA_BROKER_LISTENER_PORT=9092
使用桥接网络请参考 examples/docker-compose-bridge.yml更多部署案例和注解请参考 examples环境变量

环境变量

默认值

描述

KAFKA_CLUSTER_ID

随机生成

集群 id

KAFKA_BROKER_LISTENER_PORT

9092

broker 端口号,如果配置了 KAFKA_CFG_LISTENERS 则此项失效

KAFKA_CONTROLLER_LISTENER_PORT

19091

controller 端口号,如果配置了 KAFKA_CFG_LISTENERS 则此项失效

KAFKA_HEAP_OPTS

null

jvm 堆内存配置,例如 -Xmx512m -Xms512m

配置覆盖

Kafka 所有配置项可以通过环境变量覆盖,除了 log.dir 和 log.dirs。环境变量名使用前缀 KAFKA_CFG_ 加上配置参数,. 需要替换为 _

例如 KAFKA_CFG_LISTENERS 对应配置参数 listeners,KAFKA_CFG_ADVERTISED_LISTENERS 对应配置参数 advertised.listeners

常用配置参数:

环境变量

配置参数

KAFKA_CFG_PROCESS_ROLES

process.roles

KAFKA_CFG_LISTENERS

listeners

KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP

listener.security.protocol.map

KAFKA_CFG_ADVERTISED_LISTENERS

advertised.listeners

KAFKA_CFG_CONTROLLER_QUORUM_VOTERS

controller.quorum.voters

helm chart 部署案例

kafka-helm-chart

shell复制代码git clone  kafka-docker# kubectl create namespace your-namespace## 部署单节点集群, 仅启动一个 Podhelm install kafka -n your-namespace -f ./examples/values-combined.yml ./charts/kafka## 部署生产集群, 3 个 controller 实例, 3 个 broker 实例helm install kafka -n your-namespace -f ./examples/values-production.yml ./charts/kafka######  组合使用 values 文件  ######## 部署生产集群,并开启 kafka-ui 和 kafka exporterhelm install kafka -n your-namespace \  -f ./examples/values-exporter.yml \  -f ./examples/values-ui.yml \  -f ./examples/values-production.yml \  ./charts/kafka## 以 NodePort 对集群外暴露helm install kafka -n your-namespace -f ./examples/values-nodeport.yml ./charts/kafka## 以 LoadBalancer 对集群外暴露helm install kafka -n your-namespace -f ./examples/values-loadbalancer.yml ./charts/kafka## 开启 kafka-uihelm install kafka -n your-namespace -f ./examples/values-ui.yml ./charts/kafka

标签: #apachedockerfile例子