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是该区域分配的大小
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日再去看的话就是
即使你运行完delall 2 all后就关闭了tair,下次重启的时候,它就会更新各种操作就包括清理空间
退出tair
quit
参考资料
https://github.com/alibaba/jstorm/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
http://www.cnblogs.com/panfeng412/p/storm-spout-common-issues.html
RocketMQ,JStorm与Tair使用笔记的更多相关文章
- ROCKETMQ源码分析笔记1:tools
rocketmq源码解析笔记 大家好,先安利一下自己,本人男,35岁,已婚.目前就职于小资生活(北京),职位是开发总监. 姓名DaneBrown 好了.我保证本文绝不会太监!转载时请附上以上安利信息. ...
- Jstorm与RocketMQ整合
如果是经常关注阿里巴巴的朋友们,看到我这篇博客的题目,就知道我在参加今年的中间件比赛. 好了,废话不说,开始了. 首先我们知道,rocketmq的consumer有两种,一种是DefaultMQPus ...
- RocketMQ 简单梳理 及 集群部署笔记【转】
一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...
- RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群
1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...
- RocketMQ学习笔记(15)----RocketMQ的消息模式
在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...
- RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试
1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...
- RocketMQ学习笔记(14)----RocketMQ的去重策略
1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...
- RocketMQ学习笔记(4)----RocketMQ搭建双Master集群
前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...
- RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?
目录 RocketMQ 源码学习笔记----Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest ...
随机推荐
- BZOJ 3243 Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- ●BZOJ 2337 [HNOI2011]XOR和路径
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2337题解: 概率dp, 因为异或的每一位之间没有关系,我们就依次考虑每一位k.(即边权要么为 ...
- ●BZOJ 2434: [Noi2011]阿狸的打字机
●赘述题目 (题意就不赘述了) ●解法: ●我先想的一个比较暴力的方法(要TLE): (ac自动机)先求出last数组(参见刘汝佳的解释:last[j]:表示j节点沿着失配指针往回走时,遇到的下一个单 ...
- django rest-framework 3.类 实现restful
上节提到过,REST框架分别提供了对函数和类的装饰器,之前已经都是通过函数来写视图函数的,现在来尝试使用class 类来实现视图函数 使用基于类编写API视图,允许重用常用的功能,减少代码重复. 一. ...
- 两个文件比较之comm命令
comm命令可用于两个文件之间的比较.它有很多不错的选项可用来调整输出,以便我们执行交集.求差(difference)以及差集操作. 交集:打印出两个文件所共有的行. 求差:打印出指定文件所包含的 ...
- Tensorflow 基于分层注意网络的文件分类器
After the exercise of building convolutional, RNN, sentence level attention RNN, finally I have come ...
- 谷歌发布 TensorFlow Serving
TensorFlow服务是一个灵活的,高性能的机器学习模型的服务系统,专为生产环境而设计. TensorFlow服务可以轻松部署新的算法和实验,同时保持相同的服务器体系结构和API. TensorFl ...
- java怎样获取CPU占用率和硬盘占用率
通过jmx可以监控vm内存使用,系统内存使用等,以下是网上某博客代码,特点是通过window和linux命令获得CPU使用率. 利用java程序实现获取计算机cpu利用率和内存使用信息. packag ...
- SQL注入原理及绕过安全狗
1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...
- Android项目实战(四十五):Usb转串口通讯(CH34xUARTDriver)
需求为:手机usb接口插入一个硬件,从硬件上获取数据 例如:手机usb插入硬件A,A通过蓝牙通讯获取设备a.b的数据,作为中转站(可以做些数据处理)将数据(设备a.b产生的)传给手机程序. 设备A也可 ...