1、Spark Streaming消息通信总体流程
在启动流处理引擎的过程中,将进行启动所有的流数据接受器Receiver和注册流数据接收器Receiver两个消息通信。在接收存储流数据中,当数据块存储完成后发送添加数据块消息,而当Spark Streaming停止时,需要发送关闭所有的流数据接收器Receiver消息,整个流程如下图:
2、Spark Streaming消息通信具体流程
一、在启动流引擎过程中,JobScheduler会在内部启动ReceiverTracker和ReceiverTrackerEndPoint终端点,当ReceiverTracker准备完毕后向终端点发送startAllReceivers消息,通知其分发并启动所有的流数据接收器Receiver,其代码如下:
二、启动流数据接收器Receiver前,ReceiverSupervisor会向ReceiverTrackerEndPoint终端点发送RegisterReceiver注册信息,当注册成功后才会继续流数据接收器Receiver的启动。其中注册过程的代码是在ReceiverSupervisor的startReceiver方法中,具体如下:
三、流数据接收器Receiver接收数据的过程中,当保存完一个数据块时,作为数据转储的管理者ReceiverSupervisor会把数据块的元信息发送给ReceiverTrackerEndPoint终端点,ReceiverTracker再把这些信息转发给ReceiverBlockTracker,由它负责管理接收到数据块的元信息。发送增加数据块消息代码位于ReceiverSupervisorImpl的pushAndReportBlock方法中,具体代码如下:
四、当SparkStreaming停止时,ReceiverTracker发送注销所有流数据接收器Receiver消息,ReceiverTrackerEndPoint终端点接到消息后会调用ReceiverTracker.stop方法注销,在停止的过程当中,ReceiverTracker会发送两次注销消息,发送的间隔为10S,用于等待流数据接收器Receiver。
参考内容
1、https://blog.csdn.net/zhanglh046/article/details/78505067
2、《图解Spark核心技术与案例实战》