storm的Fields作用

之前一直没搞清楚Fields的作用,今天再看一个例子的时候突然脑洞大开,想通了!看得例子如下。

TransactionalTopologyBuilder builder =
        new TransactionalTopologyBuilder("test", "spout", new TweetsTransactionalSpout());
        
builder.setBolt("users-splitter", new UserSplitterBolt(), 4).shuffleGrouping("spout");

builder.setBolt("hashtag-splitter",
        new HashtagSplitterBolt(), 4).shuffleGrouping("spout");
        
builder.setBolt("user-hashtag-merger", new UserHashtagJoinBolt(), 4)
        .fieldsGrouping("users-splitter","users", new Fields("tweet_id"))
        .fieldsGrouping("hashtag-splitter", "hashtags", new Fields("tweet_id"));

这里有两个bolt在向user-hashtag-merger发送数据,两个bolt在 emit的时候可能发送了不同的tuple比如:

users-splitter中emit(new Values(a, b, c)); declarer.declare(new Fields("id", "name", "tweet_id"));

hashtag-splitter中则emit(new Values(a, b)); declarer.declare(new Fields("id", "tweet_id"));

比如user-hashtag-merger中需要的是users-splitter中的c,hashtag-splitter 中的b,而在user-hashtag-merger

中接收数据的时候无法知道数据是哪个bolt发来的(或者就算知道,发来的数据格式不一样也不是一个好的设计)所以这边设定了一个

Fields,这样在发送数据的时候只发送指定Fields的数据,比如这边user-hashtag-merger不管前面bolt emit的时候

发送了什么,最后收到的只有一个,方便处理。

builder.setBolt("redis-committer", new RedisCommiterCommiterBolt())
        .globalGrouping("users-splitter","users")
        .globalGrouping("hashtag-splitter", "hashtags")
        .globalGrouping("user-hashtag-merger");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值