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

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

相关文章
|
16天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
26天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
69 5
|
26天前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
64 4
|
1月前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
48 3
|
18天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
82 1
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
201 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
11天前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
1月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
53 2
|
18天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
43 0
|
1月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
64 1
下一篇
无影云桌面