# Kafka_深入探秘者(9):kafka 集群管理

Kafka_深入探秘者(9):kafka 集群管理

一、kafka 集群概述

1、kafka 集群概述:

  • 集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。

  • 集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。

  • 集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比
    单个计算机,比如工作站或超级计算机性能价格比要高得多。

2、集群的特点

集群拥有以下两个特点:

  • 1.可扩展性; 集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。
  • 2.高可用性: 集群当其中一个节点发生故障时,这台节点上面所运行的应用程序将在另一台节点被自动接管,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。

3、集群的能力

  • 1.负载均衡: 负载均衡把任务比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量。
  • 2.错误恢复: 如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可用的集群节点上。这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程,叫做错误恢复。

4、负载均衡 和 错误恢复要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图必须是相同的。

5、集群使用场景

Kafka 是一个分布式消,息系统,具有高水平扩展和高吞吐量的特点。在 Kafka 集群中,没有“中心主节点”的概念,集群中所有的节点都是对等的。

在这里插入图片描述

6、Broker(代理)

每个 Broker 即一个 Kafka 服务实例,多个 Broker 构成一个 Kafka集群,生产者发布的消,息将保存在 Broker中,消费者将从 Broker 中拉取消息进行消费。

kafka集群架构图.png

从上图中可以看出 Kafka 强依赖于 ZooKeeper ,通过 ZooKeeper 管理自身集群,如:Broker 列表管理、Partition 与 Broker的关系、Partition 与 Consumer 的关系、Producer 与 Consumer 负载均衡、消费进度 Offset 记录、消费者注册等,所以为了达到高可用,ZooKeeper 自身也必须是集群。

二、kafka 集群搭建 zookeeper

1、kafka 集群搭建 zookeeper

真实的集群环境需要部署在不同的服务器上的,测试启动多个虚拟机的内存消耗太大,
所以通常会搭建伪集群,也就是把所有服务搭建在一台虚拟机上,用端口进行区分。

2、下载安装 JDK ,并配置环境变量,查询 JDK 是否安装配置成功


- 下载 JDK - 1.  JDK-7 下载:
http://jdk.java.net/java-se-ri/7- 2.  JDK-8 下载:
https://jdk.java.net/java-se-ri/8-MR5- 3.  JDK-9 下载:
http://jdk.java.net/java-se-ri/9- 4.  JDK-10 下载:
http://jdk.java.net/java-se-ri/10- 5.  JDK-11 下载:
http://jdk.java.net/java-se-ri/11- 6.  JDK-12 下载:
http://jdk.java.net/java-se-ri/12# 打开环境变量文件,配置JDKsudo vim /etc/profile # 添加 jdk 环境变量配置# 你的 jdk 安装路径(java 默认安装路径:/usr/lib/jvm/java-8-openjdk-amd64/ )
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME-${JAVA_HOME}/jre
export PATH=S{JAVA_HOME}/bin:$PATH# 配置完 JDK 记得断开连接重新连接 或者重启系统。# 测试 jdk 是否安装配置成功
java -version

3、下载安装 Zookeeper 并上传 zookeeper 压缩包至服务器上。

1)zookeeper-3.6.3.tar.gz下载地址:
https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/

ZooKeeper 官网: http://zookeeper.apache.org
https://github.com/apache/zookeeper/tags?after=release-3.8.0-1

2)Alt+P 进入 SFTP, 输入:put (yourpath) 上传,
(如:d:\zookeeper-3.6.3.tar.gz 为本地存放路径)

或者:rz 上传。

4、将 zookeeper 解压到 /usr/local/zookeeper 目录下。


# 切换目录:
cd /usr/local# 创建 zookeeper 目录:
sudo mkdir zookeeper cd  /usr/local/zookeeper/# 解压即安装
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local/zookeeper/

5、修改 Zookeeper 的配置文件,首先进入安装路径 conf 目录,并将 zoo_sample.cfg 文件修改为 zoo.cfg,并对核心参数进行配置。文件内容如下:


# 切换目录
cd /usr/local/zookeeper/apache-zookeeper-3.6.3-bin/conf/# 将 zoo_sample.cfg 文件修改为 zoo.cfg
mv zoo_sample.cfg zoo.cfg# 对核心参数进行配置
vim zoo.cfg# The number of milliseconds of each tick
#zk服务器的心跳时间
tickTime-2080
# The number of ticks that the initial
#synchronization phase can take
#投票选举新Leader的初始化时间
initlimit=10
# The number of ticks that can pass between
# sendidg a request and getting an acknowledgementsyncLimit-5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.# 数据目录(需要新建 data 此目录)
dataDir=/usr/local/zookeeper/apache-zookeeper-3.6.3-bin/data# 日志目录
dataLogDir=/usr/local/zookeeper/apache-zookeeper-3.6.3-bin/log# the port at which the clients will connect
#Zookeeper对外服务端口,保持默认
clientPort-2181

6、复制 /usr/local/zookeeper/apache-zookeeper-3.6.3-bin/ 三份,并分别改名为:zk-01, zk-02, zk-03


# 切换目录
cd /usr/local/zookeeper/# 复制 zookeeper 三份并更名
cp -rf apache-zookeeper-3.6.3-bin ./zk-01 
cp -rf apache-zookeeper-3.6.3-bin ./zk-02 
cp -rf apache-zookeeper-3.6.3-bin ./zk-03 

7、配置每一个 zookeeper 的 dataDir(zoo.cfg),clientPort 端口 分别为 2181 2182 2183

# 切换目录
cd /usr/local/zookeeper/# 打开并编辑配置文件 zoo.cfg 
vim zk-01/zoo.cfgdataDir=/usr/local/zkcluster/zk-01/data
clientPort=2181
:wq (保存并退出)# 打开并编辑配置文件 zoo.cfg 
vim zk-02/zoo.cfgdataDir=/usr/local/zkcluster/zk-02/data
clientPort=2182# 打开并编辑配置文件 zoo.cfg 
vim zk-03/zoo.cfgdataDir=/usr/local/zkcluster/zk-03/data
clientPort=2183

8、zookeeper 配置集群

1)在每个 zookeeper 的 data 目录下创建一个 myid 文件,内容分别是 1,2,3
这个文件就是记录每个服务器的ID


# 切换目录
cd /usr/local/zookeeper/vim zk-01/myid
1
:wq vim zk-02/myid
2
:wq vim zk-03/myid
3
:wq 

2)在每一个zookeeper的 zoo.cfg 配置客户端访问端口(clientPort)和集群服务器IP列表
server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口


# 切换目录
cd /usr/local/zookeeper/vim zk-01/conf/zoo.cfg 
vim zk-02/conf/zoo.cfg 
vim zk-03/conf/zoo.cfg # 文件末尾都添加: 
server.1=172.19.206.8:2881:3881
server.2=172.19.206.8:2882:3882
server.3=172.19.206.8:2883:3883:wq (保存并退出)

9、启动集群:

依次启动三个 zookeeper 实例,其中有一个 leader 和两个 follower 。


# 切换目录
cd /usr/local/zookeeper/# 启动 Zookeeper
zk-01/bin/zkServer.sh start
zk-02/bin/zkServer.sh start
zk-03/bin/zkServer.sh start# 查询 zookeeper 是否启动成功
ps -ef | grep zookeeper # 或者 
jps -l# 查看启动状态
zk-01/zkServer.sh status
zk-02/zkServer.sh status
zk-03/zkServer.sh statusMode: follower
Mode: leader
Mode: follower# 关闭 zookeeper 
zk-01/zkServer.sh stop
zk-02/zkServer.sh stop
zk-03/zkServer.sh stop

三、kafka 集群搭建

1、拷贝三份 kafka_2.12-2.8.0 分别命名为:kafka-01, kafka-02, kafka-03


# 切换目录
cd /usr/local/kafka/# 拷贝三份 kafka_2.12-2.8.0 分别命名为:kafka-01, kafka-02, kafka-03
cp -rf kafka_2.12-2.8.0 ./kafka-01 
cp -rf kafka_2.12-2.8.0 ./kafka-02
cp -rf kafka_2.12-2.8.0 ./kafka-03

2、修改 kafka-01 的配置文件 kafka/kafka-01/config/server.properties

broker.id=0, log.dirs=/usr/local/kafka/kafka-01/logs, port=9092


# 切换目录
cd /usr/local/kafka/# 修改 kafka-01 的配置文件 kafka-01/config/server.properties
vim kafka-01/config/server.properties# 修改以下几个配置:broker.id=0 
log.dirs=/usr/local/kafka/kafka-01/logs 
# listeners=PLAINTEXT://localhost:9092
# host.name=localhost
# port=9092# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9092# 修改 zookeeper 地址为集群
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
zookeeper.connect=172.18.30.110:2181,172.18.30.110:2182,172.18.30.110:2183

3、修改 kafka-02 的配置文件 kafka/kafka-02/config/server.properties

broker.id=1, log.dirs=/usr/local/kafka/kafka-02/logs, port=9093


# 切换目录
cd /usr/local/kafka/# 修改 kafka-02 的配置文件 kafka-02/config/server.properties
vim kafka-02/config/server.properties# 修改以下几个配置:broker.id=1 
log.dirs=/usr/local/kafka/kafka-02/logs 
# listeners=PLAINTEXT://localhost:9093
# host.name=localhost
# port=9093# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9093# 修改 zookeeper 地址为集群
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
zookeeper.connect=172.18.30.110:2181,172.18.30.110:2182,172.18.30.110:2183

4、修改 kafka-03 的配置文件 kafka/kafka-03/config/server.properties

broker.id=2, log.dirs=/usr/local/kafka/kafka-03/logs, port=9094


# 切换目录
cd /usr/local/kafka/# 修改 kafka-03 的配置文件 kafka-03/config/server.properties
vim kafka-03/config/server.properties# 修改以下几个配置:broker.id=2 
log.dirs=/usr/local/kafka/kafka-03/logs 
# listeners=PLAINTEXT://localhost:9094
# host.name=localhost
# port=9094# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9094# 修改 zookeeper 地址为集群
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
zookeeper.connect=172.18.30.110:2181,172.18.30.110:2182,172.18.30.110:2183

5、删除 kafka 三个节点 kafka-01, kafka-02, kafka-03 以前的日志文件。

删除命令:rm -rf logs/*


# 切换目录
cd /usr/local/kafka/# 删除 节点1:kafka-01 以前的日志文件
rm -rf kafka-01/logs/* # 删除 节点2:kafka-02 以前的日志文件
rm -rf kafka-02/logs/* # 删除 节点3:kafka-03 以前的日志文件
rm -rf kafka-03/logs/* 

6、启动 kafka 三个节点 kafka-01, kafka-02, kafka-03

启动命令:bin/kafka-server-start.sh config/server.properties


# 切换目录
cd /usr/local/kafka/# 启动 节点1:kafka-01
kafka-01/bin/kafka-server-start.sh kafka-01/config/server.properties# 启动 节点2:kafka-02 
kafka-02/bin/kafka-server-start.sh kafka-02/config/server.properties# 启动 节点3:kafka-03 
kafka-03/bin/kafka-server-start.sh kafka-03/config/server.properties

四、kafka 集群同步总结

MirrorMaker 是为解决 Kafka 跨集群同步、创建镜像集群而存在的。
下图展示了其工作原理。该工具消费源集群消息然后将数据重新推送到目标集群。

在这里插入图片描述

上一节关联链接请点击

# Kafka_深入探秘者(8):kafka 高级应用

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

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

相关文章

ffmpeg下载/配置环境/测试

一、下载 1、访问FFmpeg官方网站下载页面:FFmpeg Download Page; 2、选择适合Windows的版本(将鼠标移动到windows端)。通常,你会找到“Windows builds from gyan.dev”或者“BtbN GitHub Releases”等选项&#xff0…

研0学习Python基础4

1.数组是一种存储大量同性质数据的连续内存空间,只要使用相同的变量名称,便可以连续访问 每一组数据。由于数组元素的便利性,使得大多数程序中都可以看到数组的身影。数组是一 个带有多个数据且模式相同的元素集合。比如,数值所…

实验2 字符及字符串输入输出与分支程序设计实验

字符及字符串输入输出 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。 分支程序设计 从键盘输入一字符,判断该字符是小写字母、大写字母、数字或者其他字符。若输入为小写字母,显示“You Input a Lo…

悼念之前的coplit

最近学MySQL七月三号还能正常卡bug使用紫色的coplit 然后今天就不行了 可惜了,蓝色的就是GPT3,紫色是4(可能比不上4但至少比蓝色的聪明点) 原来一开始问题框上面有三个模式选择,去年下半年的时候这个三个模式就被隐藏掉了&#x…

成都欣丰洪泰文化传媒有限公司开网店可靠吗?

在数字化浪潮席卷全球的今天,电商行业无疑是这场浪潮中的佼佼者。而在这波汹涌的电商大潮中,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和前瞻的市场洞察力,成为了业界的一匹黑马。今天,就让我们一起揭开这家专注于电…

python绘制领域矩形

问题描述: 使用python书写代码实现以下功能:给定四个点的坐标,调用一个函数,可以使原来的四个点分别向四周上下左右移动15距离,分别记录下移动后的坐标,然后画出内侧矩形和外侧矩形 代码: im…

提升学生岗位管理效率,构建智慧校园学工管理新模式

智慧校园学工管理系统中的“学生岗位”功能,是连接学生与实践机会的桥梁,它集岗位发布、申请、管理、评价于一体,全方位支持学生在校期间的实践锻炼与能力提升。该功能让校园内外的各类组织能轻松在线发布多样化的实践岗位,比如助…

SAP HCM ABAP DEBUG小技巧

导读 INTRODUCTION 调试小技巧:今天分享下我在处理HCM业务中,通过一些DEBUG技巧,减少DEBUG参数输入的问题,经过会遇到调试代码,有时候DEBUG太快,错过自己想看的代码,有时候不想执行某段代码&…

Python基础教程——10个可视化案例实操,一图胜千言!

让数据集改变你的思维 数据可视化是数据科学家传达洞见和讲述数据故事的关键工具。作为 Python 开发者,我们拥有丰富的可视化库和工具,能够创建各种引人入胜的图表。本文将探索一些鲜为人知但实用的可视化类型,如桑基图(Sankey Diagrams)、脊…

【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录 1.数据类型分类2.数值类型2.1tinyint 1字节2.2bit 0-64位2.3浮点类型float 4个字节decimal 3.字符串类型char开多少空间为多大varchar开多少是上限 存多少占多大空间日期和时间类型enum和setenum:枚举,“单选”类型;set:…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

用网上抓取的天气的接口做了一个系统

这个接口数据太全了了,空气质量、雷达预报、小时预报、15天预报、实况、aqi排名,云量、预警、生活指数包圆了,数据接口如下图所示: 万年历 万年历接口 行政区划边界GEOJSON 国家统计局区划编码 全国城市区划编码经纬度 天气实况 …

10计算机视觉—物体检测算法

目录 1.R-CNN(区域卷积神经网络)2014兴趣区域(RoI)池化层Fast RCNN 2015Faster R-CNN 2015Mask R-CNN 2017总结2. SSD(单发多框检测)2016SSD模型总结3.YOLO(你只看一次)快!很重要4.目标检测算法性能对比5.SSD代码实现 使用很少,比不上yolo多尺度锚框实现SSD代码实现训练…

浅谈渗透测试实战

很多时候,在看白帽子们的漏洞的时候总有一种感觉就是把web渗透简单地理解成了发现web系统漏洞进而获取webshell。其实,个人感觉一个完整的渗透(从黑客的角度去思考问题)应该是以尽一切可能获取目标的系统或者服务器的最高权限&…

Go语言工程管理

本文内容为Go工程创建和配置开发及简单程序示例。 目录 工程管理 GOPATH 配置GOPATH GOROOT 新建系统变量 配置go工程 添加go path 简单的程序实现 程序代码 开始运行 运行结果 内容解析 总结 工程管理 GOPATH go语言的项目,需要有特定的目录结构进行…

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来:从高中生进化到,博士生? 随着近月GPT-4o的出世,OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中,美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…

urfread刷算法|构建一棵树

大意 示例标签串: 处理结果: 题目1 根据标签串创建树 需求 需求:给出一个字符串,将这个字符串转换为一棵树。 字符串可以在代码里见到,是以#开头,按照\分割的字符串。 你需要将这个字符串&#xff0…

ChatGPT 论文助手:如何用 AI 技术加速学术写作过程

ChatGPT在论文写作中的应用 ChatGPT作为一个先进的语言模型,在学术论文创作领域提供显著帮助。它不仅提升学生与研究者的写作效率,还优化论文质量并引入创新观点。以下是ChatGPT在论文写作中的几种具体应用: 提升写作效率 生成写作构思&…

数据结构——树的基础概念

目录 1.树的概念 2.树的相关概念 3.树的表示 (1)直接表示法 (2)双亲表示法 (3)左孩子右兄弟表示法 4.树在实际中的运用(表示文件系统的目录树结构) 1.树的概念 树是一种非线性的数据结构&#xff0…

【机器学习】分类算法-KNN算法实现

一、前言 最近,在学习机器学习相关的内容,就想着能不能跑一些机器学习的Demo,这样更方便后期的学习,于是在B站上,找了一个Up主【abilityjh】的视频,跟着学,跟着敲代码,自己在博客上将学的东西&a…