storm drpc分布式本地和远程调用模式讲解
一.drpc 的介绍
1.rpc
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
2.drpc
drpc(Distributed Remote Procedure Call) - 分布式的远程过程调用。
我们回顾一下前面学习的storm知识,知道storm是一个分布式的流式计算框架,由1台nimbus 和多台supervisor 组成,nimbus主要是把任务分发到不同的supervisor 上,而supervisor是分布在不同节点上的。在一个完整的topology中,spout是用来收集上游jobs的,然后再由nimbus负责分发给相应的supervisor,然后由worker来执行jobs,而drcp的调用是当我们想调用这个topology中的函数时,直接通过调用supervisorr上的worker就行,然后由worker线程来执行调用的过程。
个人理解是:storm的drcp就是满足用户直接调用这个topology处理信息的,以前的可能是固定的收集数据,现在需要时,可以随时调用
二.drcp的调用
1.本地的调用
public class HelloDRPC {
private static final Logger LOG = LoggerFactory.getLogger(HelloDRPC.class);
public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException, AuthorizationException {
boolean isRemote = !(args.length == 0);
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("echo");
builder.addBolt(new EchoBolt(),1);// 第2个参数是:并行度
Config conf = new Config();
conf.setDebug(false);
conf.setNumWorkers(2);
if(isRemote){
StormSubmitter.submitTopology("HelloDRPC", conf, builder.createRemoteTopology());
LOG.warn("==================================================");
LOG.warn("the topology {} is submitted.","HelloDRPC");
LOG.warn("==================================================");
}else{
LocalDRPC drpc = new LocalDRPC();
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("HelloDRPC", conf, builder.createLocalTopology(drpc));
Arrays.asList("hello","world","storm","java","kafka").forEach(
item ->
{
String result = drpc.execute("echo",item );
LOG.warn(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ");
LOG.warn(">>>>>>>>>>>>>>> result:{}",result);
LOG.warn(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ");
}
);
}
}
public static class EchoBolt extends BaseBasicBolt{
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
LOG.warn(" ================> tuple:{}",input.getFields());
Object id = input.getValue(0);
String name = input.getString(1);
System.err.println("------------------------------");
System.err.println("id: "+id +" name: "+ name);
System.err.println("------------------------------");
collector.emit(new Values(id,"echo: "+ name));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("id","value"));
}
}
}
//在无参情况下,直接运行 会将数据全部发出
2.远程过程调用
远程过程调用是将drcp当作一个服务端,然后由client去连接调用。
1.drcp的配置
drpc.servers:
- "master"
drpc.port: 3777
storm.thrift.transport: "org.apache.storm.security.auth.plain.PlainSaslTransportPlugin" 本测试共3台虚拟机,1台nimbus 2台supervisor 在3台storm.yaml 分别配置以上内容,然后启动3台drcp服务
storm drpc & #后台启动
2.启动服务端
将HelloDRPC 当作服务端,打成jar包,然后启动
storm jar storm_test-0.0.1-SNAPSHOT.jar com.drpc.HelloDRPC 1
3.客户端连接
public class HelloClientDRPC {
private static final Logger LOG = LoggerFactory.getLogger(HelloClientDRPC.class);
public static void main(String[] args) throws DRPCExecutionException, AuthorizationException, TException {
Config conf = new Config();
conf.put("storm.thrift.transport", "org.apache.storm.security.auth.plain.PlainSaslTransportPlugin");
conf.put(Config.STORM_NIMBUS_RETRY_TIMES, 3);
conf.put(Config.STORM_NIMBUS_RETRY_INTERVAL, 10);
conf.put(Config.STORM_NIMBUS_RETRY_INTERVAL_CEILING, 20);
DRPCClient client = new DRPCClient(conf, "master", 3777);
String result = client.execute("echo", "hello");
System.out.println("result:"+result);
LOG.info("=====================================> "+ result);
}
}
//结果正常返回
storm drpc分布式本地和远程调用模式讲解的更多相关文章
- JavaEE(8) - 本地和远程调用的有状态以及无状态Session EJB
1. 使用NetBeans开发Session Bean #1. 创建项目:File-->New Project-->Java EE-->EJB Module #2. 在项目中创建Se ...
- java RMI 远程调用
1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...
- .net的远程调用
.Net远程调用(转自:http://www.cnblogs.com/omilan/articles/3191378.html) 看到了这.net远程调用的讲解,觉得不错,拿来分享!! .Net对于远 ...
- dotNET使用DRPC远程调用运行在Storm上的Topology
Distributed RPC(DRPC)是Storm构建在Thrift协议上的RPC的实现,DRPC使得你可以通过多种语言远程的使用Storm集群的计算能力.DRPC并非Storm的基础特性,但它确 ...
- Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)
转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...
- Atitit.分布式远程调用 rpc rmi CORBA的关系
Atitit.分布式远程调用 rpc rmi CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...
- 分布式远程调用SpringCloud-Feign的两种具体操作方式(精华)
一 前言 几大RPC框架介绍 1.支持多语言的RPC框架,google的gRPC,Apache(facebook)的Thrift 2.只支持特定语言的RPC框架,例如新浪的Motan 3.支持服务治理 ...
- spring代理模式 service远程调用,插件执行
最近,研究了一下平台远程调用的过程,和service层插件执行的原理,记录一下. 1.远程service调用过程 首先看一下类的继承结构 封装调用处理过程 封装service调用接口 封装servic ...
- openoffice excel word 转换pdf 支持本地调用和远程调用
OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...
随机推荐
- controller层直接通过server类调用mapper的通用方法
自己写的方法没有,但是逆向生成的server类会有继承maybatis-plus的框架 与下图的配置有关
- AI 期刊会议
本文目的为寻找以下方向最新的发展方向和资料,比如期刊会议. AI包括以下方向:计算机视觉(CV).语言(NLP)和语音 A:计算机视觉(CV) B:语言(NLP) 1. 会议 ACL.EMNLP.NA ...
- ICP、MRR、BKA等特性
一.Index Condition Pushdown(ICP) Index Condition Pushdown (ICP)是 mysql 使用索引从表中检索行数据的一种优化方式,从mysql5.6开 ...
- 存在日期类型的JSON数据,进行SpringMVC参数绑定时存在的问题和解决方案
这篇文章已经过时了. 请参考比较合适的前后端交互方式. 首先是发送AJAX请求的html页面 <!DOCTYPE html> <html> <head> <m ...
- 谷歌浏览器试调网页 多出font标签
突然发现一些按钮的点击功能失效,在控制台发现该a标签中多出个font标签,导致文字区域不能触发到a标签 就算a标签宽高设置百分百 也没用. 经测试不同的浏览器情况不一样 safari就不会出现这种情况 ...
- 文本处理三剑客之awk
简介 awk是一种处理文本文件的语言,是一个强大的文本编辑工具.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分在进行各种分析处理. gawk 用法:gawk [optio ...
- Flutter设置Container的最大最小宽高
Flutter中设置Container宽高可直接通过width和height属性来设置:如下 Container( width: 100, height: 100, color: Colors.red ...
- fastadmin 后台管理中,权限设置,不同管理员,显示不同的数据
1.https://doc.fastadmin.net/docs/controller.html
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_14-异常处理-异常处理的问题分析
这块代码没有异常处理.如果在Service出现了异常代码,在哪里捕获?要么在Servive内捕获,要么在调用service的地方也就是controller内捕获 每个调用service的地方都要去捕获 ...
- JAVA 基础编程练习题32 【程序 32 左移右移】
32 [程序 32 左移右移] 题目:取一个整数 a 从右端开始的 4-7 位. 程序分析:可以这样考虑: (1)先使 a 右移 4 位. (2)设置一个低 4 位全为 1,其余全为 0 的数.可用~ ...