# 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


# 打开环境变量文件,配置JDK

sudo 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.cfg

dataDir=/usr/local/zkcluster/zk-01/data
clientPort=2181
:wq (保存并退出)

# 打开并编辑配置文件 zoo.cfg 
vim zk-02/zoo.cfg

dataDir=/usr/local/zkcluster/zk-02/data
clientPort=2182

# 打开并编辑配置文件 zoo.cfg 
vim zk-03/zoo.cfg

dataDir=/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 status

Mode: 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.mfbz.cn/a/771158.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webpack: 并行构建

概述 受限于 Node.js 的单线程架构,原生 Webpack 对所有资源文件做的所有解析、转译、合并操作本质上都是在同一个线程内串行执行,CPU 利用率极低,因此,理所当然地,社区出现了一些以多进程方式运行 Webpack&#xff0…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Server配置管理器启动SQL server服务 4.方法三:在服务管理器中启动SQL server服务 二、建立数据库…

数据结构 —— 图的遍历

数据结构 —— 图的遍历 BFS(广度遍历)一道美团题DFS(深度遍历) 我们今天来看图的遍历,其实都是之前在二叉树中提过的方法,深度和广度遍历。 在这之前,我们先用一个邻接矩阵来表示一个图&#…

【Python新手入门指南】pip安装失败、下载慢、pip换源

文章目录 前言一、换源的基本命令是什么?二、如何从官方来换源总结 前言 对于Python新手而言,使用pip安装包就会成为一个问题,因为国内下载慢,甚至可能下载不成功,课程要安装库,但是连库都安装不成功&…

20240705 每日AI必读资讯

📚Retool 刚刚发布了最新2024上半年《人工智能现状报告》 - 收集了约750名技术人员的意见 - 包括开发者、数据团队和各行业的领导者,了解如何利用人工智能产生真正的影响。 🔗 2024上半年《人工智能现状报告》Retool刚刚发布了最新-CSDN b…

瑞数信息:智能防护新时代,看AI如何筑起网络防线

AI时代,网络安全危与机并行。 尤其是近年来大火的大模型,对于网络安全行业的影响与其他行业有所不同,一方面,AI能够通过大幅降低了安全攻击的门槛,网络威胁的复杂性和多样性不断增加,如自动化攻击、零日漏…

记录问题:解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1. 背景 我非要用vscode,不用pycharm,哼! 2. 问题 由于 import xx 自定义的模块, python run 的时候会报错 No module named ‘xxx‘ 报错信息: Traceback (most recent call last):File "d:\work\sf_financ…

原创作品 —(金融行业)年金系统交互和视觉设计

金融行业软件交互设计要点:“简化操作流程,确保流畅易用,同时注重交易环境的安全可靠,通过个性化体验提升用户满意度,并及时收集反馈以持续优化。” 2.UI设计要点:“注重视觉效果与用户体验的平衡&#xff…

创新与技术管理国际研讨会(ISITM 2024)

随着全球科技日新月异的进步,创新与技术管理在国际舞台上的地位愈发重要。在这样的背景下,创新与技术管理国际研讨会(ISITM 2024)应运而生,将于2024年12月6日至8日在中国长沙隆重举行。本次会议将聚焦创新与技术管理等…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示: 1. 主界面 技术讲解: TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题: 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下:…

论文学习——基于区域多向信息融合的动态多目标优化引导预测策略

论文题目:Guided prediction strategy based on regional multi-directional information fusion for dynamic multi-objective optimization 基于区域多向信息融合的动态多目标优化引导预测策略(Jinyu Feng a, Debao Chen b,c,d,∗, Feng Zou b,c, Fan…

【Git-驯化】一文学会git配置用户信息,git config用法细节

【Git-驯化】一文学会git配置用户信息,git config用法细节 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档…

深度解码:需求跟踪的艺术与实战应用

文章目录 引言一、需求跟踪的定义二、需求跟踪矩阵2.1 需求跟踪矩阵包含的内容2.2 跟踪矩阵层级2.3 需求属性2.4 参考表格 三、需求跟踪的收益3.1 确保商业价值最大化3.2 满足客户期望3.3 范围管理3.4 决策支持3.5 提高效率和效果3.6 文档化和沟通3.7 变更管理3.8 测量和改进 四…

ll命令在ubuntu下不能使用的解决方案

ll命令在ubuntu下不能使用的解决方案 问题: ll命令在ubuntu下不能使用, 在Ubuntu终端里执行ll,提示:command not found 解决方案: 打开当前用户目录下的.bashrc文件 找到下面的内容,将前面的“#”去掉 #alias llls -alF 然…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端,为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口,S272不仅支持多路数字量和模拟量输入,还具备灵活的扩展性和强大的控制功能&#xff0…

数据库表导出到excel:前置知识1 ALL_TAB_COLS

ALL_TAB_COLS 当前用户可访问的表、视图和群集的列的相关信息 其中几个字段: OWNER:表,视图及群集的Owner   TABLE_NAME: 表,视图及聚簇的名称   COLUMN_NAME: 字段名   DATA_TYPE :字段的数据类型…

君子签区块链+AI,驱动组织实现高效合同管理、精准风险控制

在传统合同签署的过程中,企业、组织、机构都面临着合同签署与管理的诸多问题和挑战:合同种类繁多、数量庞大导致起草效率低下;管理流程繁琐、权限分散使得审批周期冗长且效率低下;合同签订版本难以精准复核,风险防控更…

7.基于SpringBoot的SSMP整合案例-表现层开发

目录 1.基于Restfu1进行表现层接口开发 1.1创建功能类 1.2基于Restful制作表现层接口 2.接收参数 2使用Apifox测试表现层接口功能 保存接口: 分页接口: 3.表现层一致性处理 3.1先创建一个工具类,用作后端返回格式统一类:…

如何利用小程序容器技术搭建小程序生态?

小程序,作为现代移动互联网生态中的重要基础设施,正以其独特的创新性和便捷性展现出勃勃生机。截至2021年,全网小程序的数量已经突破了700万,其中微信小程序的开发者达到了300万之多。这一数字不仅代表了小程序在技术层面的成熟度…

Java项目总结3

1.抽象类与抽象方法 注意: 抽象类不能实例化 抽线类中不一定有抽i像方法,有抽象方法的类一定是抽象类 可以有构造方法 抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类 抽象类的作用: 抽取共性时,无法确定方…