kafka单机部署(单机版kafka部署)
本篇文章给大家谈谈kafka单机部署,以及单机版kafka部署对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Kafka(四)集群之kafka
- 2、Kafka 与RocketMQ 落盘机制比较
- 3、kafka2.8.0版本(一):搭建部署
- 4、kafka 单机/集群压力测试
- 5、ubuntu 怎么安装kafka
- 6、一台物理机上只能装部署一个kafka么
Kafka(四)集群之kafka
在章节二( )中,我们部署了单机的kafka,现在我们部署一套集群模式的kafka。
这里我准备了三台虚拟机:
192.168.184.134
192.168.184.135
192.168.184.136
每台机器部署一个zk和kafka。
上一章节中zk集群已经神中部署完毕。
在章节二中,134这台机器已经有kafka存在了,我们在另外两台机器上安装kafka:
在上面的文件中有几个关键点,我们一一进行配置,我会对配置中的说明翻译:
以下这两个listeners,advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。
在内网中我们使用listenners就可以了,在docker等容器或云中使用advertised。游判山
下面这个是日志路径的配置
下面这个是个重点的东西,topic在磁盘上会分为多个partitions存储,相比单一文件存储,增加了并行性,在后续文章中会详细去讲解:
日志的保存时间:
以下是zookeeper的配置:
这里我们直接设置后台启动,三个节点都是如此:
这里面有个小坑,还记得之前我们搭建的单机环境吗?那时候默认的日志文件夹在/tmp/kafka-logs下面,生成了很多内容,导致我们134这个节点无法启动成功,报错如下:
解决这个问题只需要把/tmp/kafka-logs文件删除就好了。
看到日志出现这一句表明启动成功了:
下面我们验证下是否搭建成功了,首先使用kafkatool工机具连接看下:
我们在134节点创建一个topic:
查看topic列表:
在kafkatool中查看:
创建生产者:
创建消费者:
生成者发送冲游消息:
消费者接收消息:
到此为止,kafka的集群搭建已经完成了。在后面的文章我们会去学习如何在springboot中集成kafka。
Kafka 与RocketMQ 落盘机制比较
引言
前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性。
何为“可靠性”?
先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区均能很好应对泥泞的路况。当一同开去穿越西藏,A车会因为西藏本地的汽油不达标,导致油路受阻无法点火,而B车顺利完成了穿越。因此我们说,B车的可靠性比A车高。
何为“软件可靠性”?
“软件的可靠性”就是考察软件在各种异常突发的情况下的应对能力。常见的软件异常有:磁盘损坏、进程意外退出、宿主机宕机等情况。
何为“消息中间件的可靠性”?
对于消息中间件来说,“可靠性”最直接的指标就是——消息数据不丢失。此外,消息不重投、服务一主多备等特性也可以用来评估可靠性。
那么Kafka和RocketMQ(以下简称RMQ)在可靠性上孰优孰劣呢?和我们走早李进本期的 测试 比拼吧!
测试目的
在消息收发的过程中,分别模拟Broker服务进程被Kill、物理机器掉电的异常场景,多次实验,查看极端情况下消息系统的可靠性。
测试场景
以下场景使用多个发送端向一个Topic发送消息,发送方式为同步发送,分区数为8,只启动一个订阅者。
场景1.模拟进程退出
在消息收发过衡腊程中,利用Kill -9 命令使Broker进程终止,然后重新启动,得到可靠性数据如下:
注:以上测试场景中Kafka的异步刷盘间隔为1秒钟,同步发送需设置request.required.acks=1,否则会出现消息丢失。
在Broker进程被终止重启,Kafka和RMQ都能保证同步发送的消息不丢,因为进程退出后 操作系统 能确保将该进程遗留在内存的数据刷到磁盘上。实验中,Kafka出现了极少量的消息重复。再次可以确定此场景中,二者的可靠性都很高。
场景2.模拟机器掉电
在消息收发过程中,直接拔掉Broker所在的宿主机电源,然后重启宿主机和Broker应用。因受到机房断电限制,我们在本场景测试中使用的是普通PC机器。得到可靠性数据如下:
测试发现,即使在并发很低的情况下,Kafka和RMQ都无法保证掉电后不丢消息。这个时候,就需要改变刷盘策略了。我们把刷盘策略由“异步刷盘”变更为“同步咐睁滑刷盘”,就是说,让每一条消息都完成存储后才返回,以保证消息不丢失。
注:关于两种刷盘模式的详细区别可以参照文档最下方的说明
重新执行上面的测试,得到数据如下:
首先,设置同步刷盘时,二者都没出现消息丢失的情况。限于我们使用的是普通PC机器,两者吞吐量都不高。此时Kafka的最高TPS仅有500条/秒,RMQ可以达到4000条/秒,已经是Kafka的8倍。
为什么Kafka的吞吐量如此低呢?因为Kafka本身是没有实现任何同步刷盘机制的,就是说在这种场景下测试,Kafka注定是要丢消息的。但要想做到每一条消息都在落盘后才返回,我们可以通过修改异步刷盘的频率来实现。设置参数log.flush.interval.messages=1,即每条消息都刷一次磁盘。这样的做法,Kafka也不会丢消息了,但是频繁的磁盘读写直接导致性能的下降。
另外,二者在服务恢复后,均出现了消息重复消费的情况,这说明消费位点的提交并不是同步落盘的。不过,幸好Kafka和RMQ都提供了自定义消费位点的接口,来避免大量的重复消费。
测试结论
在Broker进程被Kill的场景, Kafka和RocketMQ都能在保证吞吐量的情况下,不丢消息,可靠性都比较高。
在宿主机掉电的场景,Kafka与RocketMQ均能做到不丢消息,此时Kafka的吞吐量会急剧下跌,几乎不可用。RocketMQ则仍能保持较高的吞吐量。
在单机可靠性方面,RocketMQ综合表现优于Kafka。
附录:
测试环境
服务端为单机部署,机器配置如下:
应用版本:
测试脚本
同步刷盘和异步刷盘的区别
同步刷盘是在每条消息都确认落盘了之后才向发送者返回响应;而异步刷盘中,只要消息保存到Broker的内存就向发送者返回响应,Broker会有专门的线程对内存中的消息进行批量存储。所以异步刷盘的策略下,当机器突然掉电时,Broker内存中的消息因无法刷到磁盘导致丢失。
[img]kafka2.8.0版本(一):搭建部署
在新发布的kafka2.8.0版本中,已经可以不启动zk就可以使用kafka了,在config目录下多了一个kraft目录,在该目录中有一套新的配置文件,可以直接脱离ZooKeeper运行。
到kraft目录中修改server.properties文件,单机的话主要是修改下面的配置
需要把localhost修改卜芹厅为ip地址,否者别的节点连不上kakfa。
测试是否可以连接可以使用如下命令:首运
通过现在三行命令,即可开启一个单机的broker
这样脱离ZooKeeper的kafka就启动了,当前版本还型隐是测试阶段,所以官方不推荐使用。
kafka 单机/集群压力测试
由于kafka吞吐量特别大,所以先考虑集群服务器的自身瓶颈,因为现在测试的是单机所以只会涉及到磁盘IO以及cpu,但是对于kafka来说对于cpu的使用还是可以忽略不计的,
1.1磁盘IO写入瓶颈
使用以下命令测试磁盘IO的写入瓶颈
sync;time -p bash -c "(dd if=/dev/zero of=test.dd bs=1M count=20000)"
说明: 在当前目录下创建一个test.dd的文件,写入20000个1M的数据
磁盘写入IO的结果
可以看到平均就是187MB/s
1.2 使用iostat命令监测磁盘io情况
使用命令
# iostat -x 1
说明: 扩展查看io性能,每秒刷新一次
注意: 如果没有iostat,请执行 yum install sysstat -y 进行安装 iostat命令
关注wkB/s和%util两个参数
wkB/s:每秒写入设备的数据量(单位:KB)
%util:消耗在I/O请求中的CPU时间百分比乱谨(设备带宽利用率)。如果该值接近100%说明设备出现了瓶颈。
如图现在这台机器的磁盘IO极限值为187MB/s
1.3 单机版测试kafka性能
因为测试的次数比较多,也没有去找kafka中数据存储设置,所以就使用docker部署单机版的kafka (因为测试的数据比较多,也就多次的删除了容器,重新启动镜像)
新建目录:
mkdir /usr/local/kafka_test
dockerfile
run.sh
sources.list
目录结构如下:
生成镜像
docker build -t kafka_test /usr/local/kafka_test
启动kafka
docker run -d -it kafka_test
测试结果庆贺
从表格中可以看出来五个分区就已经是极限了
结果分析
这中间并没有设置条数/每秒,所以就是按照kafka 就会按照量级自动的吞入数据,如果我们需要对于消息的即时性做控制,还需要再重新测试一下,按照业务的延迟找到最合适的数量(单机版,然后再部署集群,测试适合的数量)
集群测试:
部署就不再这里说明了
本次测试的是三台哗差基机器集群
测试结果:
之后还测试了9个分区的topic 因为空间不足所以就没有继续测下去,但是看部分数据还超过了500MB/s还是有上升空间的
1.3 磁盘IO 读取瓶颈
使用一下命令测试磁盘IO的读取瓶颈
hdparm -tT --direct /dev/vda
说明: hdparm命令是显示与设定硬盘的参数, -t参数为评估硬盘的读取效率(不经过磁盘cache), -T参数为评估硬盘的读取效率(经过磁盘cache).
ubuntu 怎么安装kafka
kafka官网下载 kafka_2.10-0.8.2.1.tgz并复制到虚拟机Ubuntu
2.1解压到该路径
tar zxvf kafka_2.10-0.8.2.1.tgz
sudo mv kafka /home/chen-pc/kafka
启动和停止
启动Zookeeper server:
Shell代码
bin/zookeeper-server-start.sh config/zookeeper.properties
其中是为了能退出命令行
kafka安装教程
停止Kafka server
Shell代粗猛码
bin/kafka-server-stop.sh
出现如下:
INFO Shutting down. (kafka.log.LogManager)
INFO Shutdown complete. (kafka.log.LogManager)
INFO Terminate ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
INFO Session: 0x154957ee6bc0000 closed (org.apache.zookeeper.ZooKeeper)
INFO EventThread shut down (org.apache.zookeeper.ClientCnxn)
INFO [Kafka Server 0], shut down completed (kafka.server.KafkaServer)
kafka安装教程
停止Zookeeper server:
Shell代码
bin/zookeeper-server-stop.sh
出现如下:
[1]+ Exit 130 bin/zookeeper-server-start.sh config/zookeeper.properties
kafka安装教程
4.创建启动、关闭kafka脚本
cd /home/chen-pc/kafka
创建启动脚本
vi kafkastart.sh #编辑,添加以下代码
#!/bin/sh
#启动zookeeper
/home/chen-pc/kafka/bin/zookeeper-server-start.sh /home/chen-pc/kafka/config/zookeeper.properties
#等3秒后执行
sleep 3
#启动kafka
/home/chen-pc/kafka/bin/kafka-server-start.sh /home/chen-pc/kafka/config/server.properties
保存退出
vi kafkastop.sh #编辑,添加以下代码
#!/bin/sh
#关闭zookeeper
/home/chen-pc/kafka/bin/zookeeper-server-stop.sh /home/chen-pc/kafka/config/zookeeper.properties
sleep 3
#关闭kafka
/home/chen-pc/kafka/bin/kafka-server-stop.sh /home/chen-pc/kafka/config/server.properties
添宏州加脚本执行权限
chmod +x kafkastart.sh
chmod +x kafkastop.sh
以后启动kafka
sh /home/chen-pc/kafka/kafkastart.sh
Jps查看进程
kafka安装教程
关闭kafka
sh /home/chen-pc/kafka/kafkastop.sh
至此,Linux下Kafka单机安装配置完成。
4. 单节点kafka
sh /home/chen-pc/kafka/kafkastart.sh
Kafka创建topic
cd kafka
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
kafka安装教程
Kafka 删除topic
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
查看topic
/home/chen-pc/kafka/岩绝桥bin/kafka-topics.sh --list --zookeeper localhost:2181
kafka安装教程
启动consumer producer,并在producer启动后的console输入一些信息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
kafka安装教程
11
Kafka安装部署成功
一台物理机上只能装部署一个kafka么
kafka的部署模亮指式为3种嫌饥模式 1)单broker模式 2)单机多broker模式 (伪集群) 3)多机多broker模式芹键返 (真正的集群模式)
关于kafka单机部署和单机版kafka部署的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。