自己构建kafka镜像进行开发测试,你学会了吗?

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文介绍如何构建kafka自定义镜像来进行开发测试

前言

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

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

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

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

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

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

下述代码可见:https://github.com/xiaozhch5/dockerfile.git

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

  • 将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启动容器运行我们自己构建的镜像是一个行之有效的方法。

如果您还有更好的方法,请在下方留言哦!

了解更多

更多大数据、数据湖、免费资源下载,请参考:

https://lrting.top

相关文章
|
3天前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
18 3
|
1月前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
87 2
|
18天前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
66 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
3天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
14 2
|
12天前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
30 1
|
12天前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
44 1
|
18天前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
31 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
1月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
62 1
|
1月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。
|
2月前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
55 0