storm的学习与使用(四)

storm的一些常见模式

这篇文章列出了storm topology里面的一些常见模式:

流聚合(stream join)

批处理(batching)

BasicBolt

内存内缓存+fields grouping组合

计算top N

用TimeCacheMap来高效的保存一个最近被更新的对象的缓存

分布式RPC:CoordinatedBolt和KeyedFairBolt


流聚合

流聚合把两个或者多个数据流聚合成一个数据流,基于一些共同的tuple字段。流类型的聚合类型跟具体的应用是有关了。一些应用把两个流发出的所有的tuple都聚合起来--不管多长时间,而另一些应用则只聚合一些特定的tuple,聚合这些在storm里面使用fields grouping就可以了,将多个流的数据输入到一个流上。


批处理

有时候为了性能或者别的原因,你可能想把一组tuple一起处理,而不是一个个单独的处理。比如,你可能想批量更新数据库。

如果你想让你的数据处理具有可靠性,正确的方式是保存这些tuple对象的引用,直到bolt批量处理这个tuple,一旦这个批量操作结束,你可以批量的ack这些tuple.


BasicBolt

1.读一个输入的tuple

2.根据这个tuple发射一个或则多个tuple

3.在execute的方法的最后ack那个输入的tuple

遵循这类模式的bolt一般是函数或者过滤器,这种模式太常见,storm将这类模式单独进行了封装,使用IBasicBolt接口


内存内缓存+fields grouping组合

在bolt内部缓存一些东西非常常见。缓存在和fields grouping结合起来之后就更有用处了。比如,你有一个bolt把短链变成长连接。你可以把短链接到长连接的对应关系利用LRU算法缓存在内存里面以避免重复计算。

builder.setBolt(2, new ExpandUrl(), parallelism).shuffleGrouping(1);
builder.setBolt(2, new ExpandUrl(), parallelism).fieldsGrouping(1, new Fields("url"));
第二种方式的缓存会比第一种方式的缓存的效率高很多,因为同样的短链接始终被发送到同一个task。这会避免不同的机器有同样的缓存--浪费内存,同时也使得同样的短域名更可能在内存里面找到缓存。


计算top N

storm的一个常见的持续计算的模式叫做:streaming top N

比如你有一个bolt发射这样的tuple["value","count"]并且你想一个bolt基于这些信息算出top N的tuple.最简单的办法是有一个bolt可以做一个全局的grouping的动作并且在内存里面保持这个top N.这个方式对于大数据量的流显然是没有扩展性的,因为所有的数据都会被发到同一台机器上去,单机的处理能力始终是有限的。一个更好的办法是在多台机器上面并行计算这个流的每一部分的top N.然后再有一个bolt合并这些机器上面所算出来的top N以算出最后的top N

builder.setBolt(2, new RankObjects(), parallellism).fieldsGrouping(1, new Fields("value"));
builder.setBolt(3, new MergeObjects()).globalGrouping(2);
3会接受2中所有的数据去计算top N

这个模式之所以可行是因为第一个bolt的fields grouping使得这种并行算法在语义上是正确的


用TimeCacheMap来高效的保存一个最近被更新的对象的缓存

有时候你想在内存中保存一些最近活跃的对象,以及让那些不再活跃的对象自动过期。TimeCacheMap是一个非常高效的数据结构,它提供了一些callback函数是的我们在对象不再活跃时做一些事情。


分布式RPC:CoordinatedBolt和KeyedFairBolt

用storm做分布式RPC应用的时候有两种比较常见的模式:他们被封装在CoordinatedBolt和KeyedFairBolt里面

CoordinatedBolt包装你的bolt,并且确定什么时候你的bolt已经接收到所有的tuple.它主要使用Direct Stream

KeyedFairBolt同样包装你的bolt并且保证你的topology同事处理多个DRPC调用,而不是串行的一次只执行一个


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值