docker compose 安装 kafka

news2025/1/8 6:09:38

一 前置准备

创建 /data/kafkadata /data/zookeeper-1用于保存kafka和zookeeper的配置文件

kafkadata中创建三个文件夹 /kafka1 /kafka2 /kafka3,用于存放三个kafka节点的配置文件

zookeeper-1文件夹中创建 /conf /data /logs /datalog四个文件夹,用于存放zk的信息

kafka1 kafka2 kafka3中创建server.properties

其中broker.id需要修改为对应编号 1,2,3

#broker的全局唯一编号,不能重复
broker.id=1
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka数据的存储位置
log.dirs=/opt/apache/kafka/logs
#指定Topic的分区数量,这里设置为3。默认只有一个分区,设置多分区可以支持并发读写和负载均衡
num.partitions=3
#副本,默认只有一个副本,不会进行数据备份和冗余
replication.factor=3
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=zookeeper-1:2181
#zookeeper连接超时时间
zookeeper.connection.timeout.ms=60000
message.max.bytes=104857600
replica.fetch.max.bytes=104857600

zookeeper-1/conf目录下创建zoo.cfg

dataDir=/data
dataLogDir=/datalog
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=zookeeper-1:2888:3888
jute.maxbuffer=104857600

zookeeper-1/conf目录下创建log4j.properties 用于zk的日志输出,后期启动正常后可以修改输出登记

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n

将conf和kafkadata的权限赋予读写权限

比如对zookeeper-1的conf文件夹直接赋予777权限

chmod 777 conf

目录创建完成后结构示意【忽略kafka1 2 3的logs目录和zookeeper-1的data和datalog下的文件,是运行后产生的文件.plugins是未来有需要时使用,目前可以不用创建】

 

二 编写docker compose

将其中的IP地址更换为主机的ip地址,如果是服务器则是外网ip地址

如果没有创建plugins文件夹,则将volumes中的plugins映射去掉

# 配置kafka集群
# container services下的每一个子配置都对应一个节点的docker container

# 给kafka集群配置一个网络,网络名为kafka-net
networks:
  kafka-net:
    name: kafka-net
    driver: bridge
    
services:
  zookeeper-1:
    image: zookeeper
    container_name: zookeeper
    restart: always
    # 配置docker container和宿主机的端口映射
    ports:
        - 2181:2181
        - 8081:8080
    # 将docker container上的路径挂载到宿主机上 实现宿主机和docker container的数据共享
    volumes:
        - "/home/learning-java/kafka/data/zookeeper-1/data:/data"
        - "/home/learning-java/kafka/data/zookeeper-1/datalog:/datalog"
        - "/home/learning-java/kafka/data/zookeeper-1/logs:/logs"
        - "/home/learning-java/kafka/data/zookeeper-1/conf:/conf"
    # 配置docker container的环境变量
    environment:
        # 当前zk实例的id
        ZOO_MY_ID: 1
        # 整个zk集群的机器、端口列表
        ZOO_SERVERS: server.1=zookeeper-1:2888:3888 

    command: ["zkServer.sh", "start-foreground"]
    networks:
      kafka-net:
        aliases:
          - zookeeper-1
        
  kafka-1:
    image: wurstmeister/kafka
    container_name: kafka-1
    restart: always
    # 配置docker container和宿主机的端口映射  8083端口是后期部署kafka connect所需要的端口
    ports:
        - 9092:9092
        - 8084:8083
    # plugins 是我方便加入kafka connector 依赖所设文件夹,不使用connect可以不设置
    # /opt/kafka/plugins 是配置connector的时候指定的容器内部文件夹路径
    volumes:
        - "/home/learning-java/kafka/data/kafkadata/kafka-1/server.properties:/etc/kafka/config/server.properties"
        - "/home/learning-java/kafka/data/kafkadata/kafka-1/logs:/kafka"
        - "/home/learning-java/kafka/data/kafkadata/plugins:/opt/kafka/plugins"

    # 配置docker container的环境变量
    environment:
      KAFKA_ADVERTISED_HOST_NAME: IP                   ## 修改:宿主机IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9092    ## 修改:宿主机IP
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_BROKER_ID: 1
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper-1
    networks:
      kafka-net:
        aliases:
          - kafka-1
  kafka-2:
    image: wurstmeister/kafka
    container_name: kafka-2
    restart: always
    # 配置docker container和宿主机的端口映射
    ports:
        - 9093:9092
        - 8085:8083
    
    volumes:
        - "/home/learning-java/kafka/data/kafkadata/kafka-2/server.properties:/etc/kafka/config/server.properties"
        - "/home/learning-java/kafka/data/kafkadata/kafka-2/logs:/kafka"
        - "/home/learning-java/kafka/data/kafkadata/plugins:/opt/kafka/plugins"

    # 配置docker container的环境变量
    environment:
      KAFKA_ADVERTISED_HOST_NAME: IP                   ## 修改:宿主机IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9093    ## 修改:宿主机IP
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_BROKER_ID: 2
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper-1
    networks:
      kafka-net:
        aliases:
          - kafka-2
  
  kafka-3:
    image: wurstmeister/kafka
    container_name: kafka-3
    restart: always
    # 配置docker container和宿主机的端口映射
    ports:
        - 9094:9092
        - 8086:8083
        
    volumes:
        - "/home/learning-java/kafka/data/kafkadata/kafka-3/server.properties:/etc/kafka/config/server.properties"
        - "/home/learning-java/kafka/data/kafkadata/kafka-3/logs:/kafka"
        - "/home/learning-java/kafka/data/kafkadata/plugins:/opt/kafka/plugins"

    # 配置docker container的环境变量
    environment:
      KAFKA_ADVERTISED_HOST_NAME: IP                   ## 修改:宿主机IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9094    ## 修改:宿主机IP
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_BROKER_ID: 3
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper-1
    networks:
      kafka-net:
        aliases:
          - kafka-3

  kafka-manager:
    image: sheepkiller/kafka-manager              ## 镜像:开源的web管理kafka集群的界面
    container_name: kafka-manager
    restart: always
    environment:
        ZK_HOSTS: IP:2181                  ## 修改:宿主机IP
    ports:
      - "9002:9000"                               ## 暴露端口
    networks:
      kafka-net:
        aliases:
          - kafka-manager

 三 启动测试访问

启动

docker compose up -d

查看

docker ps

应该有四个容器正常运行 

如果出现哪个容器启动失败或者频繁重启,可能是docker compose文件的空格、中英文错误

或者进入容器日志查看具体错误

比如操作文件的权限没有设置会报错,就需要设置 chmod 777 一下

/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied 

打开防火墙端口 

2181 是zk端口

8084 8085 8086 9092 9093 9094 kafka需要

9002 图形化界面需要

完成后访问图形化界面

点击cluster  add cluster

输入 zookeeper信息,点击save

 发现cluster中出现

点击 zookeeper-1 进入

 done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI时代,让文献主动找上门——揭开文本和数据挖掘的变革性力量

文本和数据挖掘(text and data mining, TDM)使用计算工具和技术来分析大型文本数据集,从学术论文、期刊和其他科学出版物中的大量科学数据里提取有价值的见解,旨在识别通过传统人工分析难以或无法发现的模式、关联和趋势&#xff…

计算机网络HTTP全讲解,让你透彻掌握HTTP协议(三)http长短连接/代理/网关/缓存/内容协商机制/断点续传

HTTP HTTP的长连接与短连接短链接长链接HTTP代理代理的作用HTTP网关web网关常见的网关类型HTTP缓存HTTP缓存头部字段HTTP缓存工作方式缓存改进方案cdn缓存工作方式浏览器操作对http缓存的影响HTTP内容协商机制客户端驱动服务器驱动请求首部集近似匹配透明协商断点续传和多线程下…

类和对象的深入了解4

1.析构函数 1.1析构函数概念 与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成 的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。它的名字与类名相同,前面加上一个波浪号…

LLM大模型:十大人工智能大模型技术介绍

十大人工智能大模型技术的简介: 深度学习模型 深度学习是人工智能领域中一种重要的机器学习技术,通过构建深度神经网络来模拟人脑的认知过程。深度学习模型能够自动提取数据的特征,并在海量数据中进行学习和优化,从而在语音识别…

79.WEB渗透测试-信息收集-框架组件识别利用(3)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:78.WEB渗透测试-信息收集-框架组件识别利用(2)-CSDN博客 struts2…

长面板数据实证模型及 Stata 具体操作步骤

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 长面板数据在经济学、金融学、社会学等领域的研究中得到了广泛应用。许多学者通过构建长面板数据模型来研究各种经济现象和社会问题。例如,在研…

乌班图下的vscode粘贴代码后一直在输入CTRLV命令

最近在VMware中使用vscode开发c程序中,拷贝一段代码后,代码界面一直输入CTRLV命令,导致乌班图桌面死掉,无法操作、 解决方法: 1、强制重启。长按电源按钮强制关机,然后再次开机。 2、使用命令行界面。同时…

电测量数据交换DLMS_COSEM组件第47部分:基于IP网络的DLMS_COSEM传输层

1.范围 本部分规定了面向无连接和连接的在IP网络中所使用的DLMS/COSEM通信协议集的传输层(TL)。 这些传输层为用户DLMS/COSEM的应用层提供OSI式服务。面向无连接的传输层基于互联网标准用户数据报协议(UDP)。面向连接的传输层基于互联网标准传输控制协议(TCP)。 DLMS/CO…

C++:map和set

hello,各位小伙伴,本篇文章跟大家一起学习《C:map和set》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!!…

redis的代码开发

redis是什么? 前提:官网地址https://redis.io 1.Redis是一个开源的,key,value格式的,内存型数据结构存储系统;它可用作数据库、缓存和消息中间件。 value支持多种类型的数据结构如strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglo…

亚马逊测评自养号有什么优势?

在当今竞争激烈的电商市场中,若想实现销量的显著增长,测评策略已成为不可或缺的一环,尤其是对于新入驻平台的店铺及推出的创新产品而言,仅凭初期的自然流量难以迅速脱颖而出,因此众多跨境卖家纷纷采用测评手段&#xf…

微信小程序教程002:代码结构介绍和新建小程序页面

文章目录 代码介绍1、小程序代码构成2、小程序页面组成部分3、JSON配置文件的作用3.1 app.json文件3.2 project.config.json文件3.3 sitemap.json文件3.4 页面的.json文件新建小程序页面WXML和WXSS介绍1、什么是WXML2、什么是WXSS小程序的JS文件1、JS文件2、小程序中JS文件分类…

【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来

💎 欢迎大家互三:2的n次方_ ​ 💎1. 引言 图结构数据在现实世界中无处不在,从社交网络中的用户关系,到推荐系统中的用户-物品交互,再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力…

C#高级:枚举(Enum)从索引、值到注释的完整使用技巧

目录 一、推荐的枚举写法 二、获取注释的封装代码 三、已知【枚举】,获取注释、索引 四、已知【索引】,获取枚举值、注释 五、已知【注释】,获取枚举值、索引 六、创建一个【枚举字典】,key索引,value(枚举值&am…

入选ICML!麻省理工团队基于AlphaFold实现新突破,揭示蛋白质动态多样性

作为生物体的重要组成部分,蛋白质具有不同状态,基于集体运动或无序波动的不同结构组合,采用复杂的三维结构,来执行丰富的生物功能,例如,蛋白质构象变化对转运体、通道和酶的功能至关重要,而平衡…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 围棋的气(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

Oracle特有的DECODE函数

Oracle中的DECODE函数是一种条件表达式函数,用于基于给定的条件从一组值中选择一个值返回。它的基本语法如下: DECODE(expression, search1, result1, [search2, result2, ...], [default])expression:要比较的表达式或列。searchN&#xff…

正点原子imx6ull-mini-Linux驱动之pinctrl 和 gpio 子系统(5)

1:pinctrl 子系统 1.1:pinctrl 子系统简介 Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物, 驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架 来回顾一下上一章是…

2006年威廉王子提出分手 舞会上凯特一袭护士装令他再次沦陷 迅速和好

虽然威廉王子和凯特米德尔顿是当今最有影响力和最令人心动的情侣之一,但许多人可能忘记了,早在 2006 年,两人还在约会时,他们曾短暂分手。尽管当时他们的分手可能让英国媒体感到意外,但不到一年后,两人就和…

Window部署Ollama+Qwen2.0+Open-WebUI

文章目录 Windows下安装Docker安装Docker检查是否安装成功, 出现版本即为安装成功安装Ollama启动 Ollama 并拉取模型(选做) 修改默认地址和端口(选做) Ollama 进行跨域配置安装open-webui Windows下安装Docker 准备条件 开启Hyper-V,在“启用或关闭Windows功能”里…