上一篇分享了单节点伪分布式集群搭建方法,本篇来分享一下多节点分布式集群搭建方法。多节点分布式集群结构如下图所示:

  为了方便查阅,本篇将和上一篇一样从零开始一步一步进行集群搭建。

一、安装Jdk

  具体安装步骤可参考linux安装jdk。

二、安装与配置zookeeper

  下载地址:

  下载二进制压缩包,然后上传到linux服务器指定目录下,本次上传目录为/software,然后执行如下命令安装:

cd /software
tar -zxvf
mv zookeeper-3.4.14 /usr/local/zookeeper
cd /usr/local/zookeeper/conf
mv zoo_sample.cfg

  编辑,配置相关参数如下:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/usr/local/zookeeper/data/zookeeper1
clientPort=2181
server.1=192.168.184.128:2888:3888
server.2=192.168.184.128:2889:3889
server.3=192.168.184.128:2890:3890

  其中:

  tickTime:Zookeeper最小的时间单位,用于丈量心跳和超时时间,一般设置默认值2秒;

  initLimit:指定follower节点初始时连接leader节点的最大tick此处,设置为5,表示follower必须在5xtickTime即10秒内连接上leader,否则视为超时;

  syncLimit:设定follower节点与leader节点进行同步的最大时间,设置为2,表示最大时间为2xtickTime即4秒时间;

  dataDir:Zookeeper会在内存中保存系统快照,并定期写入该路径指定的文件夹中,生产环境需要特别注意该文件夹的磁盘占用情况; 

  clientPort:Zookeeper监听客户端连接的端口号,默认为2181,同一服务器上不同实例之间应该有所区别;

  :此处X的取值范围在1~255之间,必须是全局唯一的且和myid文件中的数字对应(myid文件后面说明),host是各个节点的主机名,port1通常是2888,用于使follower节点连接leader节点,port2通常是3888,用于leader选举,zookeeper在不同服务器上的时候,不同zookeeper服务器的端口号可以重复,在同一台服务器上的时候需要有所区别。

1.配置文件

  单节点安装zookeeper的时候,仅有一份文件,多节点安装的时候,每个zookeeper服务器就应该有一个配置文件。如果在一台服务器安装zookeeper多实例集群,则需要在conf目录下分别配置每个实例的,同时创建每个zookeeper实例自己的数据存储目录。本次在一台服务器上配置多个zookeeper实例,执行如下命令创建数据存储目录并复制配置文件:

mkdir -p /usr/local/zookeeper/data/zookeeper1
mkdir -p /usr/local/zookeeper/data/zookeeper2
mkdir -p /usr/local/zookeeper/data/zookeeper3
cd /usr/local/zookeeper/conf/
cp
cp

  复制后分别修改中的配置,修改后的配置如下:

  的配置如下:

  

  的配置如下:

  

  中的配置如下:

  

文件创建与配置

  前面提到文件中的中的X应该与myid中的数字相对应。除此之外,myid文件必须存放在每个zookeeper实例的data目录下,对应本次安装应该位于/usr/local/zookeeper/data/zookeeper1,2,3目录下,执行如下命令进行配置:

echo '1' > /usr/local/zookeeper/data/zookeeper1/myid
echo '2' > /usr/local/zookeeper/data/zookeeper2/myid
echo '3' > /usr/local/zookeeper/data/zookeeper3/myid

3.启动zookeeper服务器

  使用如下命令启动zookeeper集群:

cd /usr/local/zookeeper/bin/
./zkServer.sh start ../conf/
./zkServer.sh start ../conf/
./zkServer.sh start ../conf/

  启动后,使用如下命令查看集群状态:

cd /usr/local/zookeeper/bin/
./zkServer.sh status ../conf/./zkServer.sh status ../conf/./zkServer.sh status ../conf/

  回显信息如下:

  

  可以看到有两个follower节点,一个leader节点。

三、安装与配置kafka集群

  下载地址:http://kafka.apache.org/downloads.html

1.数据目录和配置文件创建

  目前最新版本是,本次下载版本的安装包,然后上传压缩包到服务器指定目录,本次上传目录为/software,然后执行以下命令进行安装:

tar -zxvf kafka_2.12-.tgz
mv kafka_2.12- /usr/local/kafka
mkdir -p /usr/local/kafka/logs/kafka1
mkdir -p /usr/local/kafka/logs/kafka2
mkdir -p /usr/local/kafka/logs/kafka3
cd /usr/local/kafka/config/
mv

  通过执行上面的命令,我们在/usr/local/kafka/logs文件夹中创建了kafka1,kafka2,kafka3三个文件夹用于存放三个kafka实例的数据,同时将/usr/local/kafka/config/文件夹下的重命名为用于配置kafka的第一个实例。

2.配置属性文件

  接下来配置文件,主要配置参数如下:

  :设置kafka broker的id,本次分别为1,2,3;

  :开启删除topic的开关;

  listeners=PLAINTEXT://:设置kafka的监听地址和端口号,本次分别设置为9092,9093,9094;

  :设置kafka日志数据存储路径;

  :设置kafka连接的zookeeper访问地址,集群环境需要配置所有zookeeper的访问地址;

  :为true则代表允许选用非isr列表的副本作为leader,那么此时就意味着数据可能丢失,为false的话,则表示不允许,直接抛出NoReplicaOnlineException异常,造成leader副本选举失败。

:设置连接zookeeper服务器超时时间为6秒。

  配置完成后,复制两份分别用于配置kafka的第二个,第三个节点:

cd /usr/local/kafka/config/cp cp

  修改修改其中的 以及listeners、的配置为第二个,第三个节点的配置,最终各个配置文件配置如下:

  配置:

  配置:

  配置:

3.启动kafka

  通过如下命令启动kafka集群:

cd /usr/local/kafka/bin/
./kafka-server-start.sh -daemon ../config/
./kafka-server-start.sh -daemon ../config/
./kafka-server-start.sh -daemon ../config/

  使用java的命令jps来查看kafka进程:jps |grep -i kafka

  

  说明kafak启动正常,至此kafka集群搭建完成。本次使用一台服务器作为演示,如果需要在多个服务器上配置集群,配置方法和以上类似,只是不需要像上面那样配置多个数据目录和配置文件,每台服务器的配置保持相同,并且注意在防火墙配置端口号即可。

  最后,如果需要远程访问kafka集群,则需要在防火墙中开通9092、9093、9094端口的访问权限。

四、测试

创建与删除

  首先创建一个测试topic,名为testTopic,为了充分利用3个实例(服务器节点),创建3个分区,每个分区都分配3个副本,命令如下:

cd /usr/local/kafka/bin/
./kafka-topics.sh --zookeeper 192.168.184.128:2181 192.168.184.128:2182 192.168.184.128:2183 --create --topic testTopic --partitions 3 --replication-factor 3

  回显Created topic "testTopic".则表明testTopic创建成功。执行如下命令进行验证并查看testTopic的信息:

./kafka-topics.sh --zookeeper 192.168.184.128:2181 192.168.184.128:2182 192.168.184.128:2183 --list testTopic
./kafka-topics.sh --zookeeper 192.168.184.128:2181 192.168.184.128:2182 192.168.184.128:2183 --describe --topic testTopic

  以上几条命令回显信息如下:

  接下来测试topic删除,使用如下命令进行删除:

./kafka-topics.sh --zookeeper 192.168.184.128:2181 192.168.184.128:2182 192.168.184.128:2183 --delete --topic testTopic

  执行该条命令后,回显信息如下:

  可以看到,testTopic已经被标记为删除,同时第二行提示表明当配置了属性为true的时候topic才会删除,否则将不会被删除,本次安装的时候该属性设置的值为true。

2.测试消息发送与消费

  首先使用第一步topic创建命令,先创建testTopic这个topic,然后进行消息发送与消费测试。

  控制台测试消息发送与消费需要使用kafka的安装目录/usr/local/kafka/bin下的来发送消息,使用来消费消息。因此本次打开两个控制台,一个用于执行来发送消息,另一个用于执行来消费消息。

  消息发送端命令:

cd /usr/local/kafka/bin
./ --broker-list ,192.168.184.128:9093,192.168.184.128:9094 --topic testTopic

  消息接收端命令:

cd /usr/local/kafka/bin
./ --bootstrap-server ,192.168.184.128:9093,192.168.184.128:9094 --topic testTopic --from-beginning

  当发送端和接收端都登录后,在发送端输入需要发送的消息并回车,在接收端可以看到刚才发送的消息:

  发送端:

  接收端:

  以上就是简单地生产消息与消费消息的测试,在测试消费消息的时候时候,命令里边加了个参数--from-beginning表示接收该topic从创建开始的所有消息。

3.生产者吞吐量测试

  对于任何一个消息引擎而言,吞吐量是一个至关重要的性能指标。对于Kafka而言,它的吞吐量指每秒能够处理的消息数或者字节数。kafka为了提高吞吐量,采用追加写入方式将消息写入操作系统的页缓存,读取的时候从页缓存读取,因此它不直接参与物理I/O操作,同时使用以sendfile为代表的零拷贝技术进行数据传输提高效率。

  kafka提供了脚本用于测试生产者吞吐量,使用如下命令启动测试:

cd /usr/local/kafka/bin
./ --topic testTopic --num-records 50000 --record-size 200 --throughput -1 --producer-props bootstrap.servers=,192.168.184.128:9093,192.168.184.128:9094 acks=-1

  以上回显信息表明这台服务器上每个producer每秒能发送6518个消息,平均吞吐量是,平均延迟秒,最大延迟秒,平均有50%的消息发送需要秒,95%的消息发送需要秒,99%的消息发送需要秒,的消息发送需要秒。

4.消费者吞吐量测试

  与生产者吞吐量测试类似,kafka提供了脚本用于消费者吞吐量测试,可以执行以下命令进行测试:

cd /usr/local/kafka/bin
./ --broker-list ,192.168.184.128:9093,192.168.184.128:9094 --messages 50000 --topic testTopic

  以上是测试50万条消息的consumer吞吐量,结果表明该consumer在1秒总共消费了消息。

  以上就是kafka集群的搭建以及测试,如有错误之处,烦请指正。

参考资料:《Apache kafka实战》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java集群_Kafka多节点分布式集群搭建实现过程详解_java相关推荐

  1. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)

    Java Web 开发 Java Web 开发概念 搭建过程 详解 在eclipse创建Dynamic Web Project 创建时选择Tomcat的版本 创建项目成功 eclipse环境下如何配置 ...

  2. 网络分布式文件系统-MFS搭建以及部署详解

    实验环境: 主机名 功能 server1 master server server2 chunk servers server3 chunk servers foundation8.ilt.examp ...

  3. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  4. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  5. 深入理解Java虚拟机之Java类加载机制,Java类实例化过程详解。

    目录 Java类加载机制 类加载过程 加载(Loading) 连接(Linking) 初始化(Initialzation) 使用(Useing) 卸载(Unloading) 引言 什么情况下开始类加载 ...

  6. SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解

    目录 前言 SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解 一.关于ShedLock 二.ShedLock的三个核心组件 三.ShedLock使用三步走 四.Spr ...

  7. hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)

    原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...

  8. Java类的加载过程详解 面试高频!!!值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话: 八小时内谋生活,八小时外谋发展. 望别日与 ...

  9. python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

最新文章

  1. mpvue 转uniapp 导航栏样式错乱问题修复 tabbar 样式修复
  2. python顺序结构实验_Python程序设计实验报告二:顺序结构程序设计
  3. win32程序启用控制台-- 调试输出
  4. 如何将Felgo程序部署到Android中
  5. jekyll网站上传服务器,jekyll 高效搭建个人博客之完整流程
  6. 去快捷方式小箭头_电脑桌面如何快速去掉快捷方式小箭头
  7. getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getSchemeSpecificPart()返回内容解析
  8. python数据结构之元组(tuple)——超详细
  9. Win10 Build9926 更新问题解决
  10. mysql 范围索引 els_MySQL 复习笔记
  11. asp.net千奇百怪的日历
  12. vue 百度地图纠偏 经纬度偏差、根据经纬度返回地址等信息
  13. python画函数图像 保留_如何使用python的matplotlib画反正切函数图像
  14. Ubuntu完全教程,让你成为Ubuntu高手
  15. git cherry-pick的使用
  16. 小马激活工具激活系统导致系统崩溃
  17. 计蒜客习题:猴子打字
  18. 输入商品显示商品名称和价格
  19. 【Web技术】662- 玩转前端 Video 播放器
  20. Windows11 右键菜单没有新建选项操作

热门文章

  1. 使用ESP32能驱动电子墨水屏吗?
  2. oracle tochar fm,oracle的to_char中的fm
  3. 渭南java_渭南java语言入门教程视频
  4. flutter显示图标_Flutter使用Iconfont图标
  5. python paramiko安装_Python Paramiko模块的安装与使用详解
  6. 对话框 未能返回新代码元素 可能 没有ncb_JDK1.8的新特性 | 技术
  7. Maven web项目创建
  8. flume-source
  9. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
  10. java list按照元素对象的指定多个字段属性进行排序