storm通信机制
Worker间的通信经常需要通过网络跨节点进行,Storm使用ZeroMQ或Netty(0.9以后默认使用)作为进程间通信的消息框架。
Worker进程内部通信:不同worker的thread通信使用LMAX Disruptor来完成。
不同topologey之间的通信,Storm不负责,需要自己想办法实现,例如使用kafka等;
1.Worker进程间通信
worker进程间消息传递机制,消息的接收和处理的大概流程见下图
- 对于worker进程来说,为了管理流入和传出的消息,每个worker进程有一个独立的接收线程(对配置的TCP端口supervisor.slots.ports进行监听);
对应Worker接收线程,每个worker存在一个独立的发送线程,它负责从worker的transfer-queue[transfer-queue的大小由参数topology.transfer.buffer.size来设置。]中读取消息,并通过网络发送给其他worker。 - 每个executor有自己的incoming-queue和outgoing-queue。
Worker接收线程将收到的消息通过task编号传递给对应的executor(一个或多个)的incoming-queues;
每个ex