Kafka3.3.1 docker镜像构建及使用说明

前言

kafka3.3.1版本的kraft已经标记为生产就绪了。抛弃了zookeeper,部署起来也会方便一些,但是在通过docker部署的时候遇到了一些问题,在这里记录一下。

Docker镜像构建

官方quickstartdemo中讲如果使用kraft,需要先对存储路径进行格式化。这个在构建镜像过程中遇到了问题。因为之前构建镜像的时候没有遇到过这种需要先初始化再构建的情况。研究后发现,可以通过脚本初始化。

创建docker-entrypoint.sh脚本。如果执行脚本的时候指定init参数就初始化存储路径,否则不初始化。

#!/bin/bash

if [ "$1" = 'init' ]; then
	KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
	bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
	echo "formated ..."
fi

bin/kafka-server-start.sh config/kraft/server.properties

编写dockerfile,将上述脚本拷贝到镜像中

FROM openjdk:8

MAINTAINER aspirin

ENV LANG=C.UTF-8

ENV TZ=Asia/Shanghai

COPY kafka_2.12-3.3.1.tgz /opt

RUN cd /opt && tar -zxvf kafka_2.12-3.3.1.tgz -C /opt

RUN rm -rf kafka_2.12-3.3.1.tgz

COPY docker-entrypoint.sh /opt/kafka_2.12-3.3.1

WORKDIR /opt/kafka_2.12-3.3.1

ENTRYPOINT ["/bin/bash", "docker-entrypoint.sh" ]

构建镜像

docker build -t ss/kafka:2.12-3.3.1 .

这样在首次启动镜像的适合指定init参数,之后不再指定参数即可解决。

Docker容器外无法访问已经启动kafka容器,但是容器内可以

在server.properties配置文件中,kafka有两个参数,advertised.listenerslisteners。可以查看官方文档说明。当然不看也罢,越看越迷糊。

大概意思就是说listeners参数是内网通信用的,但是像docker这种可以理解为是通过外网通信了,这时候不止需要配置listeners,还需要配置advertised.listeners,这个是外网通信用的,可以理解为这个参数是对内网地址的代理。这个参数需要写docker宿主机的ip地址,端口写启动docker容器时候映射的端口。

说的有点绕,先上配置看一下:

listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://192.168.2.3:9092

第一行配置值为0.0.0.0:9092,这个地址可写localhost(试过了不可以是localhost)也可以写回环地址0.0.0.0

第二行的配置值,192.168.2.3这个ip是docker容器宿主机的ip。9092需要跟第一行保持一致。因为kafka是启动在9092端口上的,如果改成1092,肯定不对,因为1092这个端口就没有被程序使用。这里写了9092,docker容器创建时候映射的也是这个端口,而且需要保持一致。

疑问:docker容器创建的时候将9092映射成其他的可以吗?没有尝试过,应该是不可以。有兴趣可以尝试一下,如果非要修改端口建议将上述所有9092同时修改为其他端口。

可以看到我下面容器启动映射的端口也是9092.

afae7c849595   ss/kafka:2.12-3.3.1                          "/bin/bash docker-en…"   About a minute ago   Up About a minute           0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                                                                                                                                                                                                                                                                                                        kafka331

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了构建 KafkaDocker 镜像,你可以按照以下步骤进行操作: 1. 首先,创建一个新的目录来存放你的 Dockerfile 和其他相关文件。 2. 在该目录下创建一个名为 Dockerfile 的文件,并使用文本编辑器打开。 3. 在 Dockerfile 中,使用以下基础镜像作为起点: ```Dockerfile FROM openjdk:8-jre-alpine ``` 4. 安装 Kafka 的依赖项和其他必要的工具,可以使用以下命令: ```Dockerfile RUN apk add --no-cache bash curl jq ``` 5. 下载并解压 Kafka 的二进制文件。你可以在 Kafka 的官方网站上找到可用的版本。使用以下命令: ```Dockerfile ENV KAFKA_VERSION=<kafka_version> ENV SCALA_VERSION=<scala_version> RUN wget https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz && \ tar -xzf kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz -C /opt && \ rm kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz ``` 请将 `<kafka_version>` 和 `<scala_version>` 替换为适当的 Kafka 版本和 Scala 版本。 6. 设置 Kafka 相关的环境变量,例如 ZooKeeper 的连接地址等。使用以下命令: ```Dockerfile ENV KAFKA_HOME=/opt/kafka_${SCALA_VERSION}-${KAFKA_VERSION} ENV PATH=${KAFKA_HOME}/bin:$PATH ENV KAFKA_ZOOKEEPER_CONNECT=localhost:2181 ENV KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 ENV KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 ``` 你可以根据你的需求修改这些环境变量。 7. 将 Kafka 的启动脚本添加到容器中,并设置可执行权限。使用以下命令: ```Dockerfile COPY start-kafka.sh /usr/bin/start-kafka.sh RUN chmod +x /usr/bin/start-kafka.sh ``` 8. 创建一个用于存储 Kafka 数据的目录,并设置适当的权限。使用以下命令: ```Dockerfile RUN mkdir -p /var/lib/kafka/data RUN chmod -R 777 /var/lib/kafka/data ``` 9. 定义容器启动时要执行的命令。使用以下命令: ```Dockerfile CMD ["start-kafka.sh"] ``` 10. 保存并关闭 Dockerfile 文件。 11. 在相同的目录下,创建一个名为 `start-kafka.sh` 的脚本文件,并使用文本编辑器打开。 12. 在 `start-kafka.sh` 脚本文件中,添加以下内容: ```bash #!/bin/bash $KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties & $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties ``` 13. 保存并关闭 `start-kafka.sh` 文件。 14. 在终端中,导航到你的 Dockerfile 所在的目录。 15. 使用以下命令来构建 Docker 镜像: ```bash docker build -t kafka:latest . ``` 16. 构建完成后,你可以使用以下命令来运行 Kafka 容器: ```bash docker run -d --name kafka -p 9092:9092 kafka:latest ``` 以上就是构建 Kafka Docker 镜像的基本步骤。你可以根据需要进行调整和优化。注意确保你已经安装了 Docker 并具有适当的权限来执行这些操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值