docker-compose→kafka镜像制作,kraft集群容器编排一键启动

为什么我会想自己去写一个镜像
我开始也是用stars最多的镜像也就是bitnami/kafka,但是我发现这个镜像在做kraft集群的时候有问题,就是它没办法选择配置文件启动,一直用的和zookeeper一起启动的配置文件启动,然后镜像我又没办法控制,所以我干脆就自己写了一个

vim dockerfile.kafka

FROM openjdk:8
LABEL org.opencontainers.image.authors="******@qq.com"
ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai

WORKDIR /data/

COPY start-kafka.sh /data

EXPOSE 9092

# kafka镜像版本写死的
# 有需求可以自己改
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.3.2/kafka_2.13-3.3.2.tgz
RUN tar zxvf kafka_2.13-3.3.2.tgz
RUN rm kafka_2.13-3.3.2.tgz
RUN mv kafka_2.13-3.3.2 kafka

# 给启动脚本增加可执行权限
RUN chmod +x /data/start-kafka.sh
# 创建日志目录
# 启动时会要求你在这个目录下创建一个meta.properties配置文件,并且需要添加一些配置,下面直接映射的
RUN mkdir -p /data/kafka/kraftlog/kraft-combined-logs

CMD ["bash", "/data/start-kafka.sh"]

vim start-kafka.sh

# 采用kraft模式启动
/data/kafka/bin/kafka-server-start.sh -daemon /data/kafka/config/kraft/server.properties
tail -F /data/kafka/logs/server.log

编辑docker-compose.yaml文件

vim docker-compose.yaml

version: "3"

networks:
  es-net:
    external: true

services:
  kafka1:
    build: 
      context: .
      dockerfile: Dockerfile.kafka
    container_name: kafka1
    user: root
    ports:
     - 9192:9092
     - 9193:9093
    volumes:
     # 注意这个挂载的配置文件在下面
     - ./config/kraft1/server.properties:/data/kafka/config/kraft/server.properties
     - ./config/kraft1/meta.properties:/data/kafka/kraftlog/kraft-combined-logs/meta.properties
    networks:
     - es-net

  kafka2:
    build: 
      context: .
      dockerfile: Dockerfile.kafka
    container_name: kafka2
    user: root
    ports:
     - 9292:9092
     - 9293:9093
    volumes:
     - ./config/kraft2/server.properties:/data/kafka/config/kraft/server.properties
     - ./config/kraft2/meta.properties:/data/kafka/kraftlog/kraft-combined-logs/meta.properties
    networks:
     - es-net
     
  kafka3:
    build: 
      context: .
      dockerfile: Dockerfile.kafka
    container_name: kafka3
    user: root
    ports:
     - 9392:9092
     - 9393:9093
    volumes:
     - ./config/kraft3/server.properties:/data/kafka/config/kraft/server.properties
     - ./config/kraft3/meta.properties:/data/kafka/kraftlog/kraft-combined-logs/meta.properties
    networks:
     - es-net

接下来是两个配置文件

  • 创建三个容器的配置映射目录

mkdir -p config/kraft1 config/kraft2 config/kraft3
cd config/kraft1
vim server.properties

  • server.properties配置文件
  • 三个配置文件不一样的地方只有下面两个配置
  • broker.id
  • advertised.listeners
    这里我只写一个,其他两个server.properties配置文件把这两个属性改好,放到对应目录就行
    比如: config/kraft2中的配置是 broker.id=2
    而advertised.listeners这个配置则是要写当前容器映射到宿主机的端口,因为ip是不变的嘛
    比如: config/kraft2中的配置是 advertised.listeners=92.168.31.114:9292
    config/kraft3的server.properties同理改
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
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
group.initial.rebalance.delay.ms=0

# 指定供外部使用的控制类请求信息
controller.listener.names=CONTROLLER

# 节点角色
process.roles=broker,controller
 
#节点ID,唯一
broker.id=1
 
# 集群地址
controller.quorum.voters=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093

# 定义安全协议
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
 
advertised.listeners=PLAINTEXT://192.168.31.114:9192

listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
 
# 这里我修改了日志文件的路径,默认是在/tmp目录下的
log.dirs=/data/kafka/kraftlog/kraft-combined-logs
  • meta.properties配置文件
  • 三个配置文件不一样的地方只有下面两个配置
  • broker.id
  • node.id
    这里我只写一个,其他两个meta.properties配置文件把这两个属性改好,放到对应目录就行
    这里的broker.id需要和server.properties中的保持一致
    比如: config/kraft2中的配置是 broker.id=2
    node.id也和broker.id保持一样的规则就行,不需要太关注
    比如: config/kraft2中的配置是 node.id=2
    config/kraft3的meta.properties同理改

vim meta.properties

version=1
broker.id=1
cluster.id=rXyObQbRT2OSzqwLT4tXsw
node.id=1

cluster.id可以到容器中去生成,现在先启动,不用管
生成好了更新到配置文件,重启容器即可
生成命令

./kafka/bin/kafka-storage.sh random-uuid

  • 最终的目录结构
    image.png

    image.png

    每个kraft中都有两个配置文件meta.properties和server.properties

我这里是在kafka目录下执行docker-compose命令
-d: 后台启动
--build: dockerfile编译镜像命令

docker-compose up -d --build

成果图

image.png

测试:

进入sudo docker exec -it kafka1 /bin/bash
再开一个窗口进入sudo docker exec -it kafka1 /bin/bash
简称窗口1,窗口2

  • 窗口1输入
    创建topic:
    ./kafka/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server 127.0.0.1:9092
    开启消费者:
    ./kafka/bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test
  • 窗口2输入
    开启生产者:
    ./kafka/bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test
    随便输入点


    image.png

PS: 这个是我花了一整天时间整理出来的,亲测可用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容