阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Storm中Spout使用注意事项小结

131次阅读
没有评论

共计 1021 个字符,预计需要花费 3 分钟才能阅读完成。

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 资源。

一种基于 Storm 的可扩展即时数据处理架构思考 http://www.linuxidc.com/Linux/2015-07/120511.htm

Storm 如何分配任务和负载均衡?http://www.linuxidc.com/Linux/2015-07/120466.htm

Storm 进程通信机制分析 http://www.linuxidc.com/Linux/2014-12/110158.htm

Apache Storm 的历史及经验教训  http://www.linuxidc.com/Linux/2014-10/108544.htm

Apache Storm 的详细介绍 :请点这里
Apache Storm 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/121568.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1021字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中