RocketMq服务器搭建和Java客户端配置
一 服务器搭建
二 基本概念
三 Java客户端配置
四 与kafka比较
一 服务器搭建
直接按照官网推荐安装即可:
1.64bit OS, Linux/Unix/Mac is recommended
2.64bit JDK 1.7+
3.Maven 3.2.x
4.Git
官网详细安装地址:
http://rocketmq.incubator.apache.org/docs/quick-start/
二 基本概念
Name Server:类似zookeeper, 生产端和消费端可注册,启动Broker前,先启动Name Server
Broker:消息中转角色
Producer:消息生产者
Consumer:消息消费者
1)Pull:拉取消息 Pull Consumer
2)Push:注册监听函数,以回调的方式获取消息,本质上为pull
Producer Group:一类 Producer 的集合名称,这类 Producer 通常发送一类消息
Consumer Group:一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息
三 Java客户端配置
1.springRocketMq.xml
2.MyProducer
进一步封装:
业务层调用:
MyConsumer:
3.指定一个NameServer地址
Rocketmq.properties:
RocketMq.ipAndPort = 192.168.13.127:9876
Spring配置文件中加上:
4.在web.xml中引入即可
四 与kafka比较
比较之前首先说明它和kafka都是非JMS标准(ActiveMQ),另外要明确Mq 特点异步处理 目的:减少响应时间,业务解耦和最终一致性,但不同Mq设计初衷不同,因此不能说优劣,只能说最适合某些业务场景。
1.丢失与重复的问题
丢失与重复是不可协调的矛盾。kafka允许丢失;mq不允许丢失,这种机制就会出现重复。
2.pull模型与push模型
kafka采用的是push模型,mq可选pull和push两种
push模型没有考虑到是消费端的处理能力,传统的pull设置定时拉取,这个时候如果消费者消费的较快,但是未到拉取的时间,那么会影响这个mq的速率。而mq采用的是长轮训的pull,即设置回调,一旦消费者消费完毕,立刻从broker中拉取消息。
3.定时的问题
消费者在处理消息的时候,可能会因为无法处理而返回reject 或者error,所以需要重新推送这些消息。 mq支持批量在broker中执行脚本来完成这个任务,kafka暂不支持。
4 事务的问题
这其实是一个可靠性还是实时性哪一个更被重视的问题。如果需要高实时性,就不能有事务。kafka没有事务,mq有。
5 注册中心的问题
kafka借zookeeper来进行注册;mq使用的是namesrv,它没有选举的这个过程。
6 集群问题
mq三种集群:
多主:多个Master 没有Slaver broker down未消费的不能消费
多主多从:同步双写(Master,Slaver写完毕,返回成功) 不能自动切换
多主多从:异步复制(Master写完毕即返回成功,然后复制到slaver)
生产上可用的只有多主多从:异步复制
7.开源问题
mq刚开源到apache,官方文档较少;Spring无直接支持的jar包,未来开发上的配置可能需要配置升级,目前在项目配置上可做的事情有限,目前的配置是直接把consumer和producer托管给spring
8.消息堆积能力和吞吐量
消息堆积能力指的是在不影响broker正常功能的情况下,broker所能存储的做大消息数量,吞吐量是指单位时间内broker能接受producer的消息数量。
9.mq其他特点
1)增加广播消费,对于同一条消息,consumer group中的每一个consumer都消费
2)增加tag标签,粒度更细,可在broker上针对tag过滤
3)消息过滤,除针对tag,还可针对key(header) value(body)过滤