在学习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内容其实很少如下:

1. #!/bin/bash  
2. echo "Starting kestrel in development mode..."  
3.   
4. # find jar no matter what the root dir name  
5. SCRIPT_DIR=$(cd `dirname "$0"`; pwd)  
6. ROOT_DIR=`dirname "$SCRIPT_DIR"`  
7.   
8. 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 等