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

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 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

相关文章
|
5天前
|
消息中间件 监控 Kafka
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
【8月更文挑战第13天】Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
26 3
|
11天前
|
消息中间件 Kafka
|
1天前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
6 1
|
7天前
|
运维 Kubernetes 监控
|
11天前
|
机器学习/深度学习 人工智能
高于临床测试3倍准确率!剑桥大学开发AI模型,提前6年预测阿尔茨海默症
【8月更文挑战第9天】剑桥大学研发的人工智能模型在预测阿尔茨海默症方面取得突破,准确率比传统临床测试高三倍,能提前六年预测疾病发生。该模型基于深度学习,利用大量临床及神经影像数据识别生物标志物,预测准确性达80%。这一成果有望促进早期干预,改善患者预后,但仍需更大规模研究验证,并解决隐私与公平性等问题。论文已发表于《The Lancet》子刊。
24 6
|
7天前
|
测试技术
探索软件测试的奥秘:如何构建有效的测试策略
在软件开发的海洋中,测试是确保航船不沉没的灯塔。本文将带你领略测试的魅力,从基础概念到高级策略,我们将一起航行在软件测试的广阔海域,探寻那些隐藏在代码深处的秘密。准备好了吗?让我们启航吧!
20 1
|
11天前
|
消息中间件 监控 Java
【一键解锁!】Kafka Manager 部署与测试终极指南 —— 从菜鸟到高手的必经之路!
【8月更文挑战第9天】随着大数据技术的发展,Apache Kafka 成为核心组件,用于处理实时数据流。Kafka Manager 提供了简洁的 Web 界面来管理和监控 Kafka 集群。本文介绍部署步骤及示例代码,助您快速上手。首先确认已安装 Java 和 Kafka。
48 4
|
23天前
|
消息中间件 Kafka 数据处理
Kafka与Flink:构建高性能实时数据处理系统的实践指南
Apache Kafka 和 Apache Flink 的结合为构建高性能的实时数据处理系统提供了坚实的基础。通过合理的架构设计和参数配置,可以实现低延迟、高吞吐量的数据流处理。无论是在电商、金融、物流还是其他行业,这种组合都能为企业带来巨大的价值。
|
27天前
|
Java 编译器 运维
开发与运维测试问题之在JVM中方法区也被称之为什么如何解决
开发与运维测试问题之在JVM中方法区也被称之为什么如何解决
15 1
|
13天前
|
消息中间件 Kafka
使用kafka自带脚本进行压力测试
使用kafka自带脚本进行压力测试

热门文章

最新文章