第15课:Spark Streaming源码解读之No Receivers彻底思考

通常我们使用kafka direct的方式使用的是没有自定offset的构造函数

val kc = new KafkaCluster(kafkaParams) 完完全全就是kafka的操作了

191114_q0xp_2751816.png

我们看看val fromOffsets = getFromOffsets(kc, kafkaParams, topics)

这是得到消费的起始位置。如果在kafkaParams==kafkaParams的时候会重头开始消费数据。而不等于的时候会从最近最新消费的位置进行消费数据。

191119_9Fxa_2751816.png

下面是两种处理方式的代码:最终返回fromOffsets

191142_YewE_2751816.png

接下来实例化了DirectKafkaInputDStream

191127_MggZ_2751816.png

 

看看最重要的compute 方法: 获得了 offset的结束,然后创建了KafkaRDD。

在将相关信息汇报给Taker。最终返回Some(rdd)

191151_NLv8_2751816.png

 

 Direct方式的好处:

  没缓存,就没内存溢出。

  Receiver方式会和Worker的Executor绑定,不方便做分布式(当然已有技巧做到分布式了)。RDD的Direct方式可以容易地做到分布式。

  Receiver方式在数据来不及及时处理而持续延时下去的话,Spark Streaming就有可能崩溃。Direct方式则不会出现这种情况,因为延迟了,就不会做后面的处理。

  完全的语义一致性,确保数据一定会消费,而且不会重复消费。

  Direct方式比Receiver方式性能高。

  根据自己的InputDStream进行配置,可以设置很多DStream。

  backpressure参数很先进。可以试探流进来的速度和当前的处理能力是否一致。如果不一致可以动态调整资源。

 

转载于:https://my.oschina.net/jfld/blog/683690

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值