个人GitHub地址 :https://github.com/LinMingQiang
在sparkstreaming接受数据的时候有两种方式
(1)DirectKafkaInputDStream 使用的是 Direct 方式获取数据;DirectKafkaInputDStream 继承自 InputDStream
(2)SocketInputDStream 使用的是 Receiver-based 方式获取数据;SocketInputDStream 继承自ReceiverInputDStream
这两种方式的区别:
Direct是去数据源拉取数据,只有在真正执行的时候才去获取数据
Receiver是把数据取来存储,是实时都在获取数据并储存
ReceiverInputDStream
1:将receive分给单个excutor,在excutor启动多线程(同kafka的partiton个数)来获取kafka的数据。
2:receive一直在获取kafka数据,并存在block上,等spark job去获取执行。然后更新offset。
DirectKafkaInputDStream
获取kafka数据
由于DirectKafkaInputDStream 不是继承自ReceiverInputDStream。所以不需要有Receiver,所以也就没有获取数据,不需要将数据存在内存block里面,也就没有block信息等等