Kafka3.3.1 docker镜像构建及使用说明

前言

kafka3.3.1版本的kraft已经标记为生产就绪了。抛弃了zookeeper,部署起来也会方便一些,但是在通过docker部署的时候遇到了一些问题,在这里记录一下。

Docker镜像构建

官方quickstartdemo中讲如果使用kraft,需要先对存储路径进行格式化。这个在构建镜像过程中遇到了问题。因为之前构建镜像的时候没有遇到过这种需要先初始化再构建的情况。研究后发现,可以通过脚本初始化。

创建docker-entrypoint.sh脚本。如果执行脚本的时候指定init参数就初始化存储路径,否则不初始化。

#!/bin/bash

if [ "$1" = 'init' ]; then
	KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
	bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
	echo "formated ..."
fi

bin/kafka-server-start.sh config/kraft/server.properties

编写dockerfile,将上述脚本拷贝到镜像中

FROM openjdk:8

MAINTAINER aspirin

ENV LANG=C.UTF-8

ENV TZ=Asia/Shanghai

COPY kafka_2.12-3.3.1.tgz /opt

RUN cd /opt && tar -zxvf kafka_2.12-3.3.1.tgz -C /opt

RUN rm -rf kafka_2.12-3.3.1.tgz

COPY docker-entrypoint.sh /opt/kafka_2.12-3.3.1

WORKDIR /opt/kafka_2.12-3.3.1

ENTRYPOINT ["/bin/bash", "docker-entrypoint.sh" ]

构建镜像

docker build -t ss/kafka:2.12-3.3.1 .

这样在首次启动镜像的适合指定init参数,之后不再指定参数即可解决。

Docker容器外无法访问已经启动kafka容器,但是容器内可以

在server.properties配置文件中,kafka有两个参数,advertised.listenerslisteners。可以查看官方文档说明。当然不看也罢,越看越迷糊。

大概意思就是说listeners参数是内网通信用的,但是像docker这种可以理解为是通过外网通信了,这时候不止需要配置listeners,还需要配置advertised.listeners,这个是外网通信用的,可以理解为这个参数是对内网地址的代理。这个参数需要写docker宿主机的ip地址,端口写启动docker容器时候映射的端口。

说的有点绕,先上配置看一下:

listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://192.168.2.3:9092

第一行配置值为0.0.0.0:9092,这个地址可写localhost(试过了不可以是localhost)也可以写回环地址0.0.0.0

第二行的配置值,192.168.2.3这个ip是docker容器宿主机的ip。9092需要跟第一行保持一致。因为kafka是启动在9092端口上的,如果改成1092,肯定不对,因为1092这个端口就没有被程序使用。这里写了9092,docker容器创建时候映射的也是这个端口,而且需要保持一致。

疑问:docker容器创建的时候将9092映射成其他的可以吗?没有尝试过,应该是不可以。有兴趣可以尝试一下,如果非要修改端口建议将上述所有9092同时修改为其他端口。

可以看到我下面容器启动映射的端口也是9092.

afae7c849595   ss/kafka:2.12-3.3.1                          "/bin/bash docker-en…"   About a minute ago   Up About a minute           0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                                                                                                                                                                                                                                                                                                        kafka331

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值