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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 本文介绍如何构建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

相关文章
|
2月前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
54 1
|
2月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
5天前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试
|
17天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
131 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
71 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
55 2
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
61 1
|
2月前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
2月前
|
敏捷开发 监控 测试技术
探索自动化测试框架的构建与优化####
在软件开发周期中,自动化测试扮演着至关重要的角色。本文旨在深入探讨如何构建高效的自动化测试框架,并分享一系列实用策略以提升测试效率和质量。我们将从框架选型、结构设计、工具集成、持续集成/持续部署(CI/CD)、以及最佳实践等多个维度进行阐述,为软件测试人员提供一套系统化的实施指南。 ####
|
2月前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
163 1
下一篇
开通oss服务