0
点赞
收藏
分享

微信扫一扫

RocketMQ,JStorm与Tair使用笔记


关于RocketMQ



启动mq


nohup sh mqnamesrv -n 10.150.0.94:9876 & 


nohup sh mqbroker -n 10.150.0.94:9876 &


删除mq里的消息


1. sh mqshutdown broker


2. rm -rf ~/store


3. nohup sh mqbroker -c a.conf &






关于jstorm

关于 java.lang.IllegalArgumentException: No output fields defined for component:stream xxx:default


这个是因为xxx这个组件发出了多个流,但是它下游的bolt并没有说明每一种流的分组模式


具体来说,就是下面的EmitPaymentSpot,发出了多种流,但是下面的SplitComputeSum没有说明上面的各种流的分组


TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("spout3", new EmitPaymentSpot(), spout_Parallelism_hint).setNumTasks(numtasks);

builder.setBolt("bolt", new SplitComputeSum(), bolt_hint).setNumTasks(numtasks).
shuffleGrouping("spout3");

 怎么改?


       

TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("spout3", new EmitPaymentSpot(), spout_Parallelism_hint).setNumTasks(numtasks);

builder.setBolt("bolt", new SplitComputeSum(), bolt_hint).setNumTasks(numtasks).
shuffleGrouping("spout3",RaceConfig.MqTmallTradeTopic).
shuffleGrouping("spout3",RaceConfig.MqTaobaoTradeTopic);



关于序列化
所有spout,bolt,configuration, 发送的消息(Tuple)都必须实现Serializable, 否则就会出现序列化错误.
如果是spout或bolt的成员变量没有实现Serializable时,但又必须使用时, 可以对该变量申明时,增加transient 修饰符, 然后在open或prepare时,进行实例化


几点建议
Storm中Spout用于读取并向计算拓扑中发送数据源,最近在调试一个topology时遇到了系统qps低,处理速度达不到要求的问题,经过排查后发现是由于对Spout的使用模式不当导致的多线程同步等待。这里罗列几点个人觉得编写Spout代码时需要特别注意的地方:


1. 最常用的模式是使用一个线程安全的queue,如BlockingQueue,spout主线程从queue中读取数据;另外的一个或多个线程负责从数据源(如各种消息中间件、db等)读取数据并放入queue中。
2. 如果不关心数据是否丢失(例如数据统计分析的典型场景),不要启用ack机制。
3. Spout的nextTuple和ack方法是在同一个线程中被执行的(可能最初觉得这块不会成为瓶颈,为了简单实现起见就单线程了,jstorm应该是已经改成了多线程),因此不能在nextTuple或ack方法里block住当前线程,这样将直接影响spout的处理速度,很关键。
4. Spout的nextTuple发送数据时,不能阻塞当前线程(见上一条),比如从queue中取数据时,使用poll接口而不是take,且poll方法尽量不要传参阻塞固定时间,如果queue中没有数据则直接返回;如果有多条待发送的数据,则一次调用nextTuple时遍历全部发出去。
5. Spout从0.8.1之后在调用nextTuple方法时,如果没有emit tuple,那么默认需要休眠1ms,这个具体的策略是可配置的,因此可以根据自己的具体场景,进行设置,以达到合理利用cpu资源。


关于tair

启动


进入~/tair_bin目录后,按顺序启动:


 sbin/tair_server -f etc/dataserver.conf    


 sbin/tair_cfg_svr -f etc/configserver.conf  


连接


   sbin/tairclient -c 10.150.0.94:5198 -g group_1


其中10.150.0.94:5198是config server IP:PORT,group_1是group name,在group.conf里配置的



stat -k 


   就是以kB为单位,显示各个area的使用情况


如下,quota是该区域分配的大小

RocketMQ,JStorm与Tair使用笔记_读取数据

     datasize是用户存入该区域的数据的大小,只要datasize小于等于quota,那么用户就还能存储数据


     usesize是用户的数据加上tair的元数据,所占的大小


     quotausage就是使用的百分比 usesize/quota



删除一个namespace内的内容


   delall 2 all


   就是删除2区的所有内容


另外,删除一个namespace的内容后,使用stat -k 命令,并不能立即看到改变#delall 2 all,删除只是打标,保证用户读不到,真正的清理时间在配置文件里指定,一般都是凌晨

那么你7月3日delall 2 all,当时是看不到变化的,当你在7月4日再去看的话就是

RocketMQ,JStorm与Tair使用笔记_数据源_02

即使你运行完delall 2 all后就关闭了tair,下次重启的时候,它就会更新各种操作就包括清理空间


退出tair

quit




参考资料

​​https://github.com/alibaba/jstorm/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98​​


举报

相关推荐

0 条评论