Spark Streaming揭秘 Day15 No Receivers方式思考
Spark Streaming揭秘 Day15
No Receivers方式思考
在前面也有比较多的篇幅介绍了Receiver在SparkStreaming中的应用,但是我们也会发现,传统的Receiver虽然使用比较方便,但是还是存在不少问题的,今天主要围绕kafka direct access讨论下,如果抛开Receiver来实现inputDStream该怎么做。
KafkaRDD
我们知道,在Spark中,数据的访问主要是通过RDD来进行,而针对Kafka的数据,是使用了KafkaRDD。
让我们进入KafkaRDD的定义,可以看到主要和数据访问相关的是一个包含OffsetRange的数组。
OffsetRange是对offset的范围定义,offset是什么?我们可以理解它是kafka中类似指针、游标的概念,一个offset代表了一个消息。
如果来使用这个OffsetRange,和其他RDD一样,主要是通过getPartition和compute两个方法。
getPartition主要是进行数据定位,里面对每个OffsetRange进行遍历,首先是获取了Kafka的地址,第二步是根据OffsetRange创建了一个KafkaRDDPartition。其中i是zipWithIndex方法生成的分区索引。
compute方法中,将不同的topic的partition对应生成KafkaRDD的partition,会根据KafkaRDDPartition提取出我们需要的内容,主要是会用到KafkaRDDIterator这个方法。从这段代码,我们可以看出KafkaRDDIterator是真正获取数据的方法,是lazy级别的方法,和KafkaRDDPartition一一对应。
KafkaRDDIterator是一个内部类,封装了对Kafka进行编程的逻辑。其代码逻辑主要是针对kafkaAPI的调用,采用的是SimpleConsumer这个数据模型,这个就不再详细深入。
DirectKafkaInputDStream
讲完了RDD,我们来看一下对于inputDStream的应用。
首先看下创建inputDStream的代码:
createDirectStream,可以直接指定range,如果不指定range的话,会根据参数设置进行获取,smallest是拿最早的数据,否则拿最晚的数据。最终是返回一个DirectKafkaInputDStream。
在DirectKafkaInputDStream中,主要是通过compute方法产生RDD实例,KafkaRDD和inputDStream一一对应。
有两点需要注意:
计算重试一次,主要是为了确保语义一致性。
在读取数据过程中,可以通过rateController控制消费数据的速度,并且这个速度可以为每个partition单独进行配置!!!
小结
Direct方式对我们实际的价值:
1.Direct方式没有缓存,不会出现内存溢出。
2.Receiver默认和executor绑定,Direct默认数据在多个executor上,会更方便做分布式。
3.数据消费问题,如果采用receiver方式,如果数据来不及处理,Delay多次的话,SparkStreaming可能会崩溃,Direct方式不会有这种情况,delay只是不进行下一个处理,无所谓。
4.完全的语义一致性,不会重复消费数据,并且能消费数据一定被消费,因为直接和kafka交互,只是真正执行成功之后,才会被记录下来。
5.Direct方式因为不需要内存管理,比Receiver方式性能高。
欲知后事如何,且听下回分解
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day15 No Receivers方式思考的更多相关文章
- Spark Streaming揭秘 Day35 Spark core思考
Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...
- Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考
Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考 Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考. Job是什么? 首先, ...
- Spark Streaming揭秘 Day33 checkpoint的使用
Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...
- Spark Streaming揭秘 Day32 WAL框架及实现
Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
- Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解
Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...
- Spark Streaming揭秘 Day23 启动关闭源码图解
Spark Streaming揭秘 Day23 启动关闭源码图解 今天主要分析一下SparkStreaming的启动和关闭过程. 从Demo程序出发,主要聚焦在两段代码: 启动代码: 关闭代码: 启动 ...
- Spark Streaming揭秘 Day22 架构源码图解
Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...
- Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...
随机推荐
- df 和 du 命令详解
df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案 ...
- G - Just a Hook
Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...
- 用对象型泛型和ArraysList写一个输入学员信息并展示
题目:录入学员信息并保存,当录入学员的编号为0时结束,展示出学员信息 //student类 public class Student { public int id; public String na ...
- request 和response 中的setCharacterEncoding区别
response和request的setCharacterEncoding 一.request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值. 指 ...
- CF A and B and Team Training (数学)
A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input sta ...
- [设计模式]<<设计模式之禅>>关于迪米特法则
迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least KnowledgePrinciple,LKP),虽然名字不同,但描述的是同一个规则:一个对象应该对其他对象有最少的了解 ...
- hdu 4635 强连通度缩点
思路:想用Tarjan算法进行缩点,并记录每个连通分支的点数.缩点完毕过后,找出所有出度或入度为0的连通分量,假设该连通分量的点数为num[i],那么 ans=Max(ans,(n-num-1)*(n ...
- 今天学习css一些动画效果
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- asp.net中web.config配置节点大全详解【转】
web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...
- unity3d首次倒入工程文件出错Opening file Library/FailedAssetImports.txt failed解决方法
打开unity3d,首次倒入工程到unity编辑器,但是频繁弹出“Opening file Library/FailedAssetImports.txt failed”的错误对话框,很麻烦. 解决方法 ...