自己构建 kafka 镜像进行开发测试

前言

平常在开发的时候经常需要使用某些软件协同进行功能调试,比如说,在做基于Flink CDC的时候,需要将数据从mysql binlog导入到kafka,然后再导入到hudi数据湖。

那么问题就来了,要做这么一件事情,我需要先起一个mysql,一个kafka,一个yarn集群、一个hdfs集群,让整体环境都运行起来了,我才能够使用Flink进行测试和验证。当然,假如你有一个常驻的服务运行上述环境,这些问题就都不是问题了。

但是假如说我们只有一台自己的开发主机,那可能就会比较棘手了。要完成上面的任务,我们可能首先需要在主机上安装虚拟机,然后在虚拟机上安装上述环境,在需要测试的时候,每次都启动虚拟机,然后进入虚拟机再启动各种环境。当然,这是一个可行的方法,但是,可能不是最有效的方法,今天要和大家介绍的是基于镜像构建开发环境的方法。

构建kafka镜像,在docker中运行kafka环境

下面以kafka为例介绍如何构建kafka镜像。

在构建此镜像之前,我们应该有个设想,在写Dockerfile的时候应该使整个项目是完全灵活的,也就是说,至少我们能够在进行极少数修改的情况下完全支持kafka的升级。

下述代码可见:GitHub - xiaozhch5/dockerfile

基于上述原则,我们可以这样子写:

  • 将zookeeper以及kafka的版本号抽象为构建参数,在构建时指定
  • 提前写好配置文件信息
  • 暴露2181以及9092端口

其Dockerfile为:

FROM centos:centos7.9.2009

WORKDIR /data

ARG ZK_VERSION=3.7.0
ARG KAFKA_SCALA_VERSION=2.12
ARG KAFKA_VERSION=2.8.1

COPY start-kafka.sh /data
COPY zoo.cfg /data
COPY server.properties /data

EXPOSE 2181 9092

RUN yum update -y
RUN yum install wget java-1.8.0-openjdk-devel java-1.8.0-openjdk -y

RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/${KAFKA_VERSION}/kafka_${KAFKA_SCALA_VERSION}-${KAFKA_VERSION}.tgz
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-${ZK_VERSION}/apache-zookeeper-${ZK_VERSION}-bin.tar.gz

RUN tar zxvf kafka_${KAFKA_SCALA_VERSION}-${KAFKA_VERSION}.tgz
RUN tar zxvf apache-zookeeper-${ZK_VERSION}-bin.tar.gz

RUN ln -s kafka_${KAFKA_SCALA_VERSION}-${KAFKA_VERSION} kafka
RUN ln -s apache-zookeeper-${ZK_VERSION}-bin zookeeper

RUN cp /data/zoo.cfg /data/zookeeper/conf
RUN cp /data/server.properties /data/kafka/config

RUN mkdir /data/zookeeper/data
RUN mkdir /data/kafka/kafka-logs

CMD ["bash", "/data/start-kafka.sh"]

在上述Dockerfile中,

  • start-kafka.sh为kafka组件的启动脚本
  • zoo.cfg为zookeeper的配置文件
  • server.properties为kafka的配置文件

上述三个文件需要事先提供并打入到此镜像中,其内容如下:

start-kafka.sh

/data/zookeeper/bin/zkServer.sh start

/data/kafka/bin/kafka-server-start.sh -daemon /data/kafka/config/server.properties

tail -F /data/kafka/logs/server.log

zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181

server.properties

broker.id=0
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/kafka/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0

最后将上述Dockerfile、start-kafka.sh、zoo.cfg、server.properties放入同一目录中,执行如下命令进行构建:(默认使用Dockerfile中指定的zookeeper、kafka版本)

docker build . --tag xiaozhch5/kafka:2.8.1 --no-cache=true

构建完成之后即可看到类似如下输出:

C:\bigdata\dockerfile\kafka>docker build . --tag xiaozhch5/kafka:2.8.1 --no-cache=true
[+] Building 98.4s (22/22) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                           0.0s
 => => transferring dockerfile: 1.06kB                                                                                                                                                                                                                                         0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/library/centos:centos7.9.2009                                                                                                                                                                                                       1.2s
 => [ 1/17] FROM docker.io/library/centos:centos7.9.2009@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                                                                                               0.0s
 => [internal] load build context                                                                                                                                                                                                                                              0.0s
 => => transferring context: 100B                                                                                                                                                                                                                                              0.0s
 => CACHED [ 2/17] WORKDIR /data                                                                                                                                                                                                                                               0.0s
 => [ 3/17] COPY start-kafka.sh /data                                                                                                                                                                                                                                          0.0s
 => [ 4/17] COPY zoo.cfg /data                                                                                                                                                                                                                                                 0.0s
 => [ 5/17] COPY server.properties /data                                                                                                                                                                                                                                       0.0s
 => [ 6/17] RUN yum update -y                                                                                                                                                                                                                                                 23.1s
 => [ 7/17] RUN yum install wget java-1.8.0-openjdk-devel java-1.8.0-openjdk -y                                                                                                                                                                                               28.8s
 => [ 8/17] RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.1/kafka_2.12-2.8.1.tgz                                                                                                                                                                             16.2s
 => [ 9/17] RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz                                                                                                                                                   7.9s
 => [10/17] RUN tar zxvf kafka_2.12-2.8.1.tgz                                                                                                                                                                                                                                  1.3s
 => [11/17] RUN tar zxvf apache-zookeeper-3.7.0-bin.tar.gz                                                                                                                                                                                                                    14.4s
 => [12/17] RUN ln -s kafka_2.12-2.8.1 kafka                                                                                                                                                                                                                                   0.5s
 => [13/17] RUN ln -s apache-zookeeper-3.7.0-bin zookeeper                                                                                                                                                                                                                     0.6s
 => [14/17] RUN cp /data/zoo.cfg /data/zookeeper/conf                                                                                                                                                                                                                          0.6s
 => [15/17] RUN cp /data/server.properties /data/kafka/config                                                                                                                                                                                                                  0.7s
 => [16/17] RUN mkdir /data/zookeeper/data                                                                                                                                                                                                                                     0.6s
 => [17/17] RUN mkdir /data/kafka/kafka-logs                                                                                                                                                                                                                                   0.6s
 => exporting to image                                                                                                                                                                                                                                                         1.6s
 => => exporting layers                                                                                                                                                                                                                                                        1.6s
 => => writing image sha256:07acb689dbae2445117a823003fbde7df67e3edd5c26c11acaaaa6409a7ea700                                                                                                                                                                                   0.0s
 => => naming to docker.io/xiaozhch5/kafka:2.8.1    

在构建完我们需要的镜像时,就可以使用该镜像运行kafka环境进行开发测试。

基于上述kafka镜像启动容器:

docker run -itd -p 2181:2181 -p 9092:9092 xiaozhch5/kafka:2.8.1

至此,我们就可以基于上述kafka环境进行开发测试。

总结

我们平常开发时,其实会遇到各种各样的环境(组件不同、版本不同等),基于docker启动容器运行我们自己构建的镜像是一个行之有效的方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值