spark streaming 接收kafka消息之一 -- 两种接收方式
源码分析的spark版本是1.6。
首先,先看一下 org.apache.spark.streaming.dstream.InputDStream 的 类说明:
This is the abstract base class for all input streams. This class provides methods start() and stop()
which is called by Spark Streaming system to start and stop receiving data. Input streams that can
generate RDDs from new data by running a service/thread only on the driver node (that is, without
running a receiver on worker nodes), can be implemented by directly inheriting this InputDStream.
For example, FileInputDStream, a subclass of InputDStream, monitors a HDFS directory from the driver
for new files and generates RDDs with the new files. For implementing input streams that requires
running a receiver on the worker nodes, use org.apache.spark.streaming.dstream.ReceiverInputDStream
as the parent class.
翻译如下:
所有输入stream 的抽象父类,这个类提供了 start 和 stop 方法, 这两个方法被spark streaming系统来开始接收或结束接收数据。
两种接收数据的两种方式:
在driver 端接收数据;
1. 输入流通过在driver 节点上运行一个线程或服务,从新数据产生 RDD,继承自 InputDStream 的子类
2. 输入流通过运行在 worker 节点上的一个receiver ,从新数据产生RDD , 继承自 org.apache.spark.streaming.dstream.ReceiverInputDStream
也就是说 spark 1.6 版本的输入流的抽象父类就是 org.apache.spark.streaming.dstream.InputDStream,其子类如下图所示:

与kafka 对接的两个类已经 在上图中标明。
现在对两种方式做一下简单的比较:
相同点:
1.内部都是通过SimpleConsumer 来获取消息,在获取消息之前,在获取消息之前,from offset 和 until offset 都已经确定。
2.都需要在构造 FetchRequest之前,确定leader, offset 等信息。
3. 其内部都有一个速率评估器,起到平衡速率的作用
不同点:
1. offset 的管理不同。
DirectKafkaInputStream 可以通过外部介质来管理 offset, 比如 redis, mysql等数据库,也可以是hbase等。
KafkaInputStream 则需要使用zookeeper 来管理consumer offset数据, 其内部需要监控zookeeper 的状态。
2. receiver运行的节点不同。
DirectKafkaInputStream 对应的 receiver 是运行在 driver 节点上的。
KafkaInputStream 对应的 receiver 是运行在非driver 的executor 上的。
3. 内部对应的RDD不一样。
DirectKafkaInputStream 对应的是 KafkaRDD,内部的迭代器是KafkaRDDIterator
KafkaInputStream 对应的是 WriteAheadLogBackedBlockRDD 或者是 BlockRDD,内部的迭代器 是自定义的 NextIterator
4. 保证Exactly-once 语义的机制不一样。
DirectKafkaInputStream 是根据 offset 和 KafkaRDD 的机制来保证 exactly-once 语义的
KafkaInputStream 是根据zookeeper的 offset 和WAL 机制来保证 exactly-once 语义的,接收到消息之后,会先保存到checkpoint 的 WAL 中
spark streaming 接收kafka消息之一 -- 两种接收方式的更多相关文章
- SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式
SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...
- Spark Streaming中空batches处理的两种方法(转)
原文链接:Spark Streaming中空batches处理的两种方法 Spark Streaming是近实时(near real time)的小批处理系统.对给定的时间间隔(interval),S ...
- spark streaming 接收kafka消息之五 -- spark streaming 和 kafka 的对接总结
Spark streaming 和kafka 处理确保消息不丢失的总结 接入kafka 我们前面的1到4 都在说 spark streaming 接入 kafka 消息的事情.讲了两种接入方式,以及s ...
- Spark Streaming与Kafka集成
Spark Streaming与Kafka集成 1.介绍 kafka是一个发布订阅消息系统,具有分布式.分区化.多副本提交日志特点.kafka项目在0.8和0.10之间引入了一种新型消费者API,注意 ...
- Spark Streaming 交互 Kafka的两种方式
一.Spark Streaming连Kafka(重点) 方式一:Receiver方式连:走磁盘 使用High Level API(高阶API)实现Offset自动管理,灵活性差,处理数据时,如果某一时 ...
- spark streaming集成kafka接收数据的方式
spark streaming是以batch的方式来消费,strom是准实时一条一条的消费.当然也可以使用trident和tick的方式来实现batch消费(官方叫做mini batch).效率嘛,有 ...
- Spark Streaming和Kafka整合保证数据零丢失
当我们正确地部署好Spark Streaming,我们就可以使用Spark Streaming提供的零数据丢失机制.为了体验这个关键的特性,你需要满足以下几个先决条件: 1.输入的数据来自可靠的数据源 ...
- spark streaming 整合 kafka(一)
转载:https://www.iteblog.com/archives/1322.html Apache Kafka是一个分布式的消息发布-订阅系统.可以说,任何实时大数据处理工具缺少与Kafka整合 ...
- Spark Streaming使用Kafka保证数据零丢失
来自: https://community.qingcloud.com/topic/344/spark-streaming使用kafka保证数据零丢失 spark streaming从1.2开始提供了 ...
随机推荐
- asp.net中c#求百分比
double m= 50;double n= 100; Response.Write((m/ (m+ n)).ToString("0%"));Response.Write((m/ ...
- Mac下cocos2dx3.1用Cocos IDE写的Lua binding篇01
本人Lua新手,写着玩玩. 新建一个模版project. 一.改动main.lua require "Cocos2d" require "Cocos2dConstants ...
- C# WPF 低仿网易云音乐(PC)Banner动画控件
原文:C# WPF 低仿网易云音乐(PC)Banner动画控件 由于技术有限没能做到一模一样的动画,只是粗略地做了一下.动画有点生硬,还有就是没做出网易云音乐的立体感.代码非常简单粗暴,而且我也写有很 ...
- WPF中制作立体效果的文字或LOGO图形(续)
原文:WPF中制作立体效果的文字或LOGO图形(续) 上篇"WPF中制作立体效果的文字或LOGO图形"(http://blog.csdn.net/johnsuna/archive/ ...
- NYOJ 24 素数的距离问题
素数的距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描写叙述 如今给出你一些数.要求你写出一个程序,输出这些整数相邻近期的素数,并输出其相距长度.假设左右有等距离长 ...
- MySQL索引 专题
什么是索引 索引是存储引擎用于快速找到记录的一种数据结构,索引类似一本书的目录,我们可以快速的根据目录查找到我们想要的内容的所在页码,索引的优化应该是对查询性能优化最有效的手段了. 因此,首先你要明白 ...
- 方阵的迹(trace)及其微分(导数)
trace 的一个十分重要的性质在于线性性, Tr(A+B)=Tr(A)+Tr(B)Tr(cA)=cTr(A) 1. 基本性质 Tr(A)=Tr(AT) Tr(AB)=Tr(BA) Tr(ABC)=T ...
- OpenGL(六) gluLookAt和gluPerspective函数解析
在调用gluLookAt和gluPerspective函数之前一般要先调用一下glLoadIdentity函数,先说一下这个函数是做什么的. glLoadIdentity glLoadIdentity ...
- 关于 Swift 2.0 - 语言新特性与革新
随着刚刚结束的 WWDC 2015 苹果发布了一系列更新,这其中就包括了令人振奋的 Swift 2.0. 这是对之前语言特性的一次大幅的更新,加入了很多实用和方便的元素,下面我们就一起来看看这次更新都 ...
- windows Hook 消息分类
调用SetWindowsHookEx的DLL的模块实例句柄,它可以经由DllMain入口的第一个参数得到.HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpf ...