文档章节

SyncSpout开源组件

g
 gabry
发布于 2016/12/22 14:56
字数 947
阅读 199
收藏 2

SyncSpout简介

SyncSpout是上海华瑞银行(SHRB)大数据团队开发的,用来构造可交互的、同步的Storm拓扑的组件。我们在做实时推荐系统中,希望将Storm的并发性和分布式计算能力应用到“请求-响应”范式中, 比如客户的某次购买行为能够以消息的形式发送到storm拓扑中,storm在指定时间返回推荐结果,也就是说storm需要具有可交互性。基于这样的背景,大数据团队开发了SyncSpout组件, 该组件可以接收客户端异步的消息,经过Storm拓扑异步计算,在指定时间内返回给客户端。

架构图

关键组件介绍

  • SyncSpout:继承storm的IRichSpout,用于接收客户端调用消息并将消息emit出去的Spout
  • SendBolt:拓扑中发送计算结果的bolt,该bolt将计算结果返回给客户端
  • SyncSpoutClient:用于向SyncSpout发送同步消息,并在指定时间内获取结果

特性

  • 使普通的storm应用可交互
  • storm应用重启后,客户端可自动重连
  • 对storm应用几乎没有侵入,对业务没有侵入
  • storm集群返回的计算结果能够准确的返回给指定客户端的某次调用
  • 客户端可发送任意类型的消息给storm应用;storm应用可返回任意类型的消息给客户端
  • 客户端可在指定时间内同步获取storm应用返回的计算结果
  • 支持高并发,在单机环境下1000并发量基本在100毫秒内返回

与Storm官方DRPC的异同

  • 都能接收一个远程请求,发送请求到storm拓扑,从storm拓扑接收结果,发送结果回等待的客户端
  • DRPC只能处理字符串;SyncSpout可以处理任意可序列化的类型
  • DRPC仅能处理“线性的”DRPC拓扑,计算以一连串步骤的形式表达;SyncSpout能够处理任意类型的storm拓扑
  • DRPC的功能被移植到了Trident中,从原生Storm被废弃了;SyncSpout会被SHRB一直维护

用法

客户端

// 创建客户端
val client = new SyncSpoutClient(topName)
// 初始化
client.init()
// 向远程storm集群发送消息,并在1000毫秒内返回,若超时则返回null指针
val syncResult = client.ask(ClientMsg("这是发送的消息,可以是任意类型"),1000).asInstanceOf[String]
println(s"返回消息是[$syncResult],可以是任意类型")

storm集群

val builder = new TopologyBuilder()
// ActorSpout用于接收消息
builder.setSpout("syncSpout",SyncSpout(),2)
// SimpleBolt用于处理消息
builder.setBolt("simpleBolt",new SimpleBolt(),2).setNumTasks(4).shuffleGrouping("syncSpout")
// SendBolt用于返回消息
builder.setBolt("sendBolt",new SendBolt(),2).shuffleGrouping("simpleBolt")
val cluster = new LocalCluster()
val topName = "SyncSpoutTop"
val conf = new Config()
conf.setNumWorkers(2)
cluster.submitTopology(topName,conf,builder.createTopology())
println( "SyncSpout 启动成功!" )

注意点

  • 客户端实例化时的topName就是storm集群中的名称
  • sync-spout-server.conf、sync-spout-client.conf中需要配置zookeeper的host列表

引用第三方类库

联系方式

E-MAIL:365781062@qq.com

公司E-MAIL:wushaojie@shrbank.com

GitHub

© 著作权归作者所有

g
粉丝 2
博文 1
码字总数 947
作品 0
浦东
私信 提问
OS X Mavericks 系统使用的开源组件已经可下载

今天,苹果OS X Mavericks中使用的开源组件已经可以下载,苹果在iOS和OS X中使用了很多开源组件,这些开源代码都有协议,要求苹果将自己对开源组件做出的更改同样开源出来。在开源许可要求下...

oschina
2013/10/25
4.8K
12
苹果推出 OS X El Capitan 系统开源组件下载

今日,苹果在OS X Capitan中使用的开源组件已经可供下载,苹果在iOS和OS X中使用了很多开源组件,这些开源代码共同架构了OS X系统所使用的Darwin内核。根据开源代码的协议,苹果需将自己对开...

oschina
2015/12/10
2.3K
1
开源组件有风险 Veracode 发布 2017 年软件安全报告

代码安全和安全开发是信息安全的源头,也是最重要的环节,但是随着开源组件的流行,开源组件漏洞正在对安全开发构成广泛威胁。 随着敏捷开发和开源软件的流行,开源组件如今是开发者的宠儿,...

周其
2017/10/25
988
2
新思科技发布 OSSRA 报告,分析开源应用趋势和模式

很多软件都是建立在可重用的开源组件的基础之上 。但是使用开源的人员经常忽视相关的安全和许可风险。软件开发人员通常会从开源存储库中获取代码,以嵌入其公司的产品中,加快开发过程。虽然...

oschina
05/28
816
0
黑鸭子开源报告:私有软件使用开源代码的比例在增长

Black Duck Software 审计了超过 1000 个商业代码库,发现 96% 含有开源组件,平均每个程序含有 257 个组件,代码库里开源组件的比例从 36% 增长到了 57%,显示私有软件使用开源代码的比例在...

局长
2018/05/24
2.2K
11

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
5
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部