docker compose 安装 kafka

一 前置准备

创建 /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-netdriver: bridgeservices:zookeeper-1:image: zookeepercontainer_name: zookeeperrestart: 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实例的idZOO_MY_ID: 1# 整个zk集群的机器、端口列表ZOO_SERVERS: server.1=zookeeper-1:2888:3888 command: ["zkServer.sh", "start-foreground"]networks:kafka-net:aliases:- zookeeper-1kafka-1:image: wurstmeister/kafkacontainer_name: kafka-1restart: 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                   ## 修改:宿主机IPKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9092    ## 修改:宿主机IPKAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"KAFKA_ADVERTISED_PORT: 9092KAFKA_BROKER_ID: 1KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1depends_on:- zookeeper-1networks:kafka-net:aliases:- kafka-1kafka-2:image: wurstmeister/kafkacontainer_name: kafka-2restart: always# 配置docker container和宿主机的端口映射ports:- 9093:9092- 8085:8083volumes:- "/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                   ## 修改:宿主机IPKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9093    ## 修改:宿主机IPKAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"KAFKA_ADVERTISED_PORT: 9093KAFKA_BROKER_ID: 2KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1depends_on:- zookeeper-1networks:kafka-net:aliases:- kafka-2kafka-3:image: wurstmeister/kafkacontainer_name: kafka-3restart: always# 配置docker container和宿主机的端口映射ports:- 9094:9092- 8086:8083volumes:- "/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                   ## 修改:宿主机IPKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://IP:9094    ## 修改:宿主机IPKAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:2181"KAFKA_ADVERTISED_PORT: 9094KAFKA_BROKER_ID: 3KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1depends_on:- zookeeper-1networks:kafka-net:aliases:- kafka-3kafka-manager:image: sheepkiller/kafka-manager              ## 镜像:开源的web管理kafka集群的界面container_name: kafka-managerrestart: alwaysenvironment:ZK_HOSTS: IP:2181                  ## 修改:宿主机IPports:- "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://xiahunao.cn/news/3280732.html

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

相关文章

IoTDB 入门教程 实战篇④——C#示例(开源)

文章目录 一、前文二、新建C#项目三、NuGet安装四、示例源码五、查询数据六、参考 一、前文 IoTDB入门教程——导读 本文详细阐述了如何通过一个C#项目成功连接到IoTDB时序数据库,进而展示了如何向该数据库高效地写入数据以及执行精确的数据查询操作。 此示例旨在为…

Redis高可用之持久化,以及reids的性能管理

一、redis高可用: 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性 在redis中实现高可…

多模态大模型(MM-LLMs)近期概述

《MM-LLMs: Recent Advances in MultiModal Large Language Models》 论文地址:https://arxiv.org/abs/2401.13601 GitHub地址:https://mm-llms.github.io/ 1.介绍 目的:MM-LLMs旨在减少计算费用并提高多模态预训练的效率, 因为从头开始训…

Data Augmentation数据增强

目录 数据增强是什么 为什么数据增强 数组增强分类 有监督数据增强 无监督数据增强 数据增强是什么 数据增强又称数据扩增,是一种通过应用合理且随机的变换(例如图像位移、旋转)来增加训练集多样性的技术。让有限的数据产生等价于更多数…

Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动

1. jenkins集成JDK 成功登录Jenkins后,选择Manage Jenkins,选择Tools 集成JDK 2. jenkins集成git 因为Jenkins自动从git远程仓库拉取代码 首先要在Jenkins所在的linux服务器上安装git yum install -y git然后,实行集成JDK的第一步 配置g…

C#:枚举及位标志周边知识详解(小白入门)

文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升。以下是对其技术特色的深入解析: 本地化技术优化:FlowUs息流通过深入研究中文用户的操作习惯,实现了界面的本地化设…

【WRF安装第二期(Ubuntu)】搭建WRF编译所需系统-系统环境检验

WRF安装第二期:搭建WRF编译所需系统-系统环境检验 0 升级和安装基础环境1 系统环境检验(System Environment Tests)1.1 检验和安装基础包1.1.1 安装指令1.1.2 检验指令 1.2 WRF安装的目录结构1.2.1 WRF系统环境测试 1.3 测试编译器&#xff0…

Python文件加密库之cryptography使用详解

概要 在现代信息社会中,数据的安全性变得越来越重要。为了保护敏感信息,文件加密技术被广泛应用。Python的cryptography库提供了强大的加密功能,可以轻松实现文件加密和解密。本文将详细介绍如何使用cryptography库进行文件加密,包含具体的示例代码。 cryptography库简介 …

模型剪枝综述

目录 1 深度神经网络的稀疏性: 2 剪枝算法分类: 3 具体的剪枝方法包括: 4 剪枝算法流程: 5 几种常见的剪枝算法: 6 结构化剪枝和非结构化剪枝各有其优缺点: 7 剪枝算法对模型精度的影响 8 影响剪枝…

《集成电路应用》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《集成电路应用》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《集成电路应用》级别? 答:国家级。主管单位:中国电子信息产业集团有限公司 主…

【错误总结】Ubuntu系统中执行 sudo apt-get update报错

Ubuntu系统中执行 sudo apt-get update报错 命令行描述升级sudo报错并解决错误描述错误解决原因1:系统网络问题 原因2:设置清华源后/etc/apt/sources.list不匹配原因3:ubuntu自带的源/etc/apt/sources.list有问题 apt-get update成功log参考 …

电脑的录屏功能在哪?精准操作,电脑录屏方法大揭秘

电脑的录屏功能已成为数字时代创作和分享的重要工具。然而,对于许多人来说,要找到电脑上的录屏功能可能并不容易。究竟它们隐藏在哪里?如何启用这个功能呢?这些问题可能会让人感到困惑。 本文将带您一起探索电脑上的录屏功能所在…

ip地址会因为位置不同而改变吗

在数字化时代,IP地址作为互联网用户的“数字指纹”,扮演着至关重要的角色。它不仅是设备接入网络的唯一标识,还常常与用户的地理位置紧密相连。然而,随着移动互联网的普及和人们日常活动的多样化,一个有趣的现象逐渐显…

【漏洞复现】泛微E-Cology9 WorkPlanService 前台SQL注入漏洞(XVE-2024-18112)

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤,直接将其拼接进了SQL查询语句中,导致系统出…

Kafka的入门及简单使用

文章目录 前言一、Kafka 的基本架构?1. Producer(生产者)2. Broker(代理/服务器)3. Consumer(消费者)4. Consumer Group(消费者组)5. Topic(主题)…

openJdk21镜像打包制作

文章目录 一.目的:二.dockerfile 代码三.调试四.效果图五.声明 一.目的: 制作基于openjdk21的基础镜像,方便后续使用 内容: 1.使用的是Debian 11 slim 作为基础镜像(在此感谢no name大佬提醒我alpine做为基础镜像不稳…

TypeScript 与 JavaScript 的对比区别

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

保研408真题练习:2009年全国硕士研究生入学统一考试(单选篇1)

🧊🧊🧊单项选择题(共40道) 🧊数据结构(10道) 🥥1.打印机的缓冲区逻辑结构 栈:先进后出; 队列:先进先出。 缓冲区的作用是解决主机…

EasyExcel 初使用—— Java 实现多种写入 Excel 功能

前言 大家好,我是雪荷。之前有一篇博客(EasyExcel 初使用—— Java 实现读取 Excel 功能_java easyexcel.read-CSDN博客)介绍了 Java 如何读取 Excel 表格,那么此篇博客就和大家介绍下 Java 如何利用 EasyExcel 写入 Excel。 Ea…