大数据学习第18天

storm通讯机制初解

Worker间的通信经常需要通过网络跨节点进行,
Storm使用ZeroMQ或Netty(0.9以后默认使用)作为进程间通信的消息框架。
Worker进程内部通信:不同worker的thread通信使用LMAX Disruptor来完成。
不同topologey之间的通信,Storm不负责,需要自己想办法实现,例如使用kafka等;
通讯原理
1、对于worker进程来说,为了管理流入和传出的消息,
每个worker进程有一个独立的接收线程
<一个worker进程运行一个专用的接收线程来负责将外部发送过来
的消息移动到对应的executor线程的incoming-queue中>
(对配置的TCP端口supervisor.slots.ports进行监听)对应Worker接收线程,
每个worker存在一个独立的发送线程(transfer-queue的每个元素实际上代表一个tuple的集合) ,
它负责从worker的transfer-queue中读取消息,并通过网络发送给其他worker。
2、每个executor有自己的incoming-queue 和outgoing-queue 。
Worker接收线程将收到的消息通过task编号传递给对应的executor(一个或多个)的incoming-queues;
每个executor有单独的线程分别来处理spout/bolt的业务逻辑,
业务逻辑输出的中间数据会存放在outgoing-queue中,
当executor的outgoing-queue中的tuple达到一定的阀值,
executor的发送线程将批量获取outgoing-queue中的tuple,并发送到transfer-queue中。
3、每个worker进程控制一个或多个executor线程,用户可在代码中进行配置。
其实就是我们在代码中设置的并发度个数。

drpc部署笔记

分布式RPC(DRPC)背后的想法是使用Storm在运行中并行计算真正强大的函数。
Storm拓扑接收函数参数流作为输入,并为每个函数调用发出结果的输出流。

DRPC并不是Storm的一个特征,因为它是Storm的原始流,spouts,bolts和拓扑表示的模式。
DRPC本可以打包成Storm独立的库,但是它与Storm捆绑在一起非常有用。

分布式RPC由“DRPC服务器”协调(Storm随附实现)。
DRPC服务器协调接收RPC请求,将请求发送到Storm拓扑,从Storm拓扑接收结果,
并将结果发送回等待的客户端。 从客户端的角度来看,分布式RPC调用看起来就像常规的RPC调用。


API

LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("reach");
builder.addBolt(new GetTweeters(), 3);
builder.addBolt(new GetFollowers(), 12)
.shuffleGrouping();
builder.addBolt(new PartialUniquer(), 6)
.fieldsGrouping(new Fields("id", "follower"));
builder.addBolt(new CountAggregator(), 2)
.fieldsGrouping(new Fields("id"));

 

posted @ 2019-06-26 21:21  lkoooox  阅读(103)  评论(0)    收藏  举报