本期内容:Direct AccessKafka前面有几期我们讲了带Receiver的Spark Streaming 应用的相关源码解读。但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Approach)的方式,No Receiver的方式的优势:1. 更强的控制自由度2. 语义一致性其实No Receivers的方式更符合我们读取数据,操作数据的思路的。因为Spark 本身是一个计算框架,他底层会有数据来源,如果没有Receivers,我们直接操作数据来源,这其实是一种更自然的方式。 如果要操作数据来源,肯定要有一个封装器,这个封装器一定是RDD类型。 以直接访问Ka 香港云主机fka中的数据为例:Spark Streaming会封装一个KafkaRDD:RDD中重要的方法 getPartitions 和 compute 其中compute中返回了一个 KafkaRDDIterator:其中会调用KafkaCluster的connect方法:KafkaCluster的connect方法返回了一个 SimpleConsumer,如果想自定义控制kafka消息的消费,则可自定义Kafka的consumer。我们再回过头看看:实际生成了什么:生成了一个DirectKafkaInputDStream:这里面即产生了KafkaRDD实例。我们再重新思考有Receiver和No Receiver的Spark Streaming应用 Direct访问的好处:1. 不需要缓存,不会出现OOM等问题(数据缓存在Kafka中)2. 如果采用Receiver的方式,Receiver和Worker上Executor绑定了,不方便做分布式(配置一下也可以做)。如果采用Direct的方式,直接是RDD操作,数据默认分布在多个Executor上,天然就是分布式的。3. 数据消费的问题,在实际操作的时候,如果采用Receiver的方式,如果数据操作来不及消费,Delay多次之后,Spark Streaming程序有可能崩溃。如果是Direct的方式,就不会。4. 完全的语义一致性,不会重复消费,且只被消费一次。
备注:1、DT大数据梦工厂微信公众号DT_Spark
2、IMF晚8点大数据实战YY直播频道号:68917580
3、新浪微博:http://www.weibo.com/ilovepains
一 vimvi visual interface 全屏文本编辑器行文本编辑器sed全屏:vi/vim nanovim= vi improved模式:编辑模式,命令模式输入模式末行模式编辑模式–》输入模式i insert,原地插入aappend,之后插入o新起…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。