您的位置:首页 > 其它

kestrel消息队列介绍

2015-01-21 08:51 120 查看
在学习storm的过程中,storm的官方文档中多次在实例中列举kestrel消息队列的例子。处于好奇和兴趣顺便了解了一下kestrel消息队列。

Kestrel是twitter的开发团队用scala语言写的开源消息中间件。
官方网址:http://twitter.github.io/kestrel/  

其具备了以下特点:

  快速:Kestrel运行在JVM上,用户可以视为java的项目来使用高级的优化手段。

  小巧:Kestrel大约2500行scala代码

  持久性:为了获取不错的性能表现,队列是存储在内存中。但是同时在硬盘上保留了日志,因此服务器 关闭可以保证不丢失数据。

  可靠性:客户端可以尝试获取队列中的数据项,如果客户端在没有确认获取数据项之前断开链接,数据 项还可以被其他客户端获取,就是说客户端崩溃不会导致数据项的丢失。

除此之外kestrel还具备了很多让人眼前一亮的特性:

支持多请求协议:目前支持三种协议,

                        memcache协议(并没有完整的实现memcache协议,只支持部分操作协议),协议的说明 https://github.com/memcached/memcached/blob/master/doc/protocol.txt

                        text协议,

                        thrift协议

FanoutQueues(队列分发):根据队列的命名规则完成数据项的自动复制分发,可以发送端只发送一次,多个接受端可以相互之间不受影响的独立接收数据。

集群支持:kestrel集群类似于memcache集群,集群中的服务器互相并不知道对方的存在。请求的分发主要由客户端来完成,kestrel本身也可以通过设置来结合zookeeper来管理其集群资源。

灵活的配置:kestrel具备很多可调节的配置项,比如可以选择是否持久化或者数据项过期时长,结合jvm本身的配置,可提供给使用者更多的优化空间。

有关kestrel的性能:

kestrel安装包中自带了测试kestrel性能的脚本在安装路径下 /scripts/load/下

我个人测试结果如下:

测试机 内存32G  cpu:Intel(R) Xeon(R) CPU           E5645  @ 2.40GHz * 24 

数据大小1kb每条
并发插入线程数
连接数
插入数据
总数据量
时长
单位时间处理数
1
1
10000
10000
3s
3333/s
10
1
3000
30000
3s
10000/s
20
1
10000
200000
14s
14286/s
10
10
10000
100000
6s
16667/s
20
10
10000
200000
10s
20000/s
40
10
10000
400000
20s
20000/s
40
40
10000
400000
20s
20000/s
40
1
10000
400000
20s
20000/s
20
1
10000
200000
10s
20000/s
20
20
10000
200000
10s
20000/s
80
1
10000
800000
80s
10000/s
80
1
10000
800000
40s
20000/s
80
20
10000
800000
39s
20000/s
白色背景服务器启动参数Xmx=1GB红色背景为修改了Kestrel服务器配置Xmx=4GB测试结果。

目前测试的Kestrel的结果来看。单线程处理大概3MB/s。而在多线程的测试情况下达到2wQPS约20MB/s。基本上和官方的测试结果相同。

由于对于Kestrel还在逐渐的熟悉没有进行过多的服务器调优。所以只能形成暂时的结论。

kestrel的安装运行:

下载kestrel的安装包 下载地址  http://twitter.github.io/kestrel/  官网上选择kestrel的安装包

解压之后路径假设 KESTREL_HOME

运行 KESTREL_HOME/scripts/devel.sh 可以按照开发的模式启动kestrel。

devel.sh内容其实很少如下:

[plain] view
plaincopy





#!/bin/bash  

echo "Starting kestrel in development mode..."  

  

# find jar no matter what the root dir name  

SCRIPT_DIR=$(cd `dirname "$0"`; pwd)  

ROOT_DIR=`dirname "$SCRIPT_DIR"`  

  

java -server -Xmx1024m -Dstage=development -jar "$ROOT_DIR"/kestrel_2.9.2-2.4.1.jar  

其中-Dstage=development 相当与将应用 KESTREL_HOME/config/development.scala 文件作为kestrel的配置文件。

因此修改-Dstage参数可以应用其他的配置。比如 -Dstage=production 就是应用 KESTREL_HOME/config/production.scala 配置文件

另外在实际生产环境中可以使用kestrel.sh脚本来管理kestrel进程。 

kestrel.sh 参数有 start stop 等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: