温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Storm 中Fields有什么用

发布时间:2021-06-22 18:00:06 来源:亿速云 阅读:134 作者:Leah 栏目:云计算

今天就跟大家聊聊有关Storm 中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");

看完上述内容,你们对Storm 中Fields有什么用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI