Spark Streaming之Kafka的Receiver和Direct方式
一 Receiver方式
Receiver是使用Kafka的high level的consumer API来实现的。Receiver从Kafka中获取数据都是存储在Spark Executor内存中的,然后Spark Streaming启动的job会去处理那些数据
然而这种方式很可能会丢失数据,如果要启用高可靠机制,让数据零丢失,就必须启动Spark Streaming预写日志机制。该机制会同步地接收到Kafka数据写入分布式文件系统,比如HDFS上的预写日志中。所以底层节点出现了失败,也可以使用预写日志的数据进行恢复
二 Direct方式
它会周期性的查询kafka,来获取每个topic + partition的最新offset,从而定义每一个batch的offset的范围。当处理数据的job启动时,就会使用kafka简单的消费者API来获取kafka指定offset的范围的数据
# 它简化了并行读取:如果要读取多个partition,不需要创建多个输入DStream然后对他们进行union操作。Spark会创建跟kafka partition一样多的RDD partition,并且会并行从kafka中读取数据。所以在kafka partition和RDD partition之间有一个一一对应的映射关系
# 高性能:如果要保证数据零丢失,基于Receiver的机制需要开启WAL机制,这种方式其实很低效,因为数据实际上被copy了2分,kafka自己本身 就有可靠的机制,会对数据复制一份,在理在复制一份到WAL中。基于Direct的方式,不依赖于Receiver,不需要开启WAL机制,只要kafka中做了数据的复制,那么就可以通过kafka的副本进行恢复。
# 一次仅且一次的事务机制
基于Receiver的方式,是使用Kafka High Level的API在zookeeper中保存消费过的offset的。这是消费kafka数据的传统方式,这种方式配合这WAL机制可以保证数据零丢失,但是无法保证数据只被处理一次的且仅且一次,可能会两次或者更多,因为spark和zookeeper是不可能同步的。
低于Direct的方式,使用kafka简单API, SparkStreaming负责追踪消费的offset,并且保存在checkpoint中。因此可以保证数据消费一次仅仅一次
Spark Streaming之Kafka的Receiver和Direct方式相关推荐
- Spark Streaming读取Kafka数据的两种方式
Kafka在0.8和0.10之间引入了一种新的消费者API,因此,Spark Streaming与Kafka集成,有两种包可以选择: spark-streaming-kafka-0-8与spark-s ...
- Spark Streaming使用Kafka保证数据零丢失
为什么80%的码农都做不了架构师?>>> 源文件放在github,随着理解的深入,不断更新,如有谬误之处,欢迎指正.原文链接https://github.com/jacksu/ ...
- sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据
Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...
- Spark Streaming 遇到 kafka
Spark Streaming 遇到 kafka 站酷 | 插画 搭建流程略,主要讲一下如何更好的结合使用,看图说话. Kafka 结合 Spark Streaming 实现在线的准实时流分析,除了保 ...
- 根据官网文档看Spark Streaming对接Kafka的两种方式, 以及如何实现Exactly Once语义
注: 本文算是本人的学习记录, 中间可能有些知识点并不成熟, 不能保证正确性. 只能算是对官网文档作了个翻译和解读, 随时有可能回来更新和纠错 上一篇文章讨论了Spark Streaming的WAL( ...
- Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展
Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...
- spark streaming 消费 kafka入门采坑解决过程
kafka 服务相关的命令 # 开启kafka的服务器 bin/kafka-server-start.sh -daemon config/server.properties & # 创建top ...
- Spark Streaming 实战案例(五) Spark Streaming与Kafka
主要内容 Spark Streaming与Kafka版的WordCount示例(一) Spark Streaming与Kafka版的WordCount示例(二) 1. Spark Streaming与 ...
- Spark中如何管理Spark Streaming消费Kafka的偏移量
spark streaming 版本 2.1 kafka 版本0.9.0.0 在这之前,先重述下spark streaming里面管理偏移量的策略,默认的spark streaming它自带管理的of ...
最新文章
- wps临时文件不自动删除_win10系统下wps残留文件无法删除如何解决
- axure文件如何加密_rp文件命名也可能导致文件无法打开
- Tensorflow运行程序报错 FailedPreconditionError
- apt-get软件包管理命令 和 apt-key命令
- 使用系统调用pipe建立一条管道线_【Linux系统】Linux进程间通信
- python的闭包要素_Python的闭包
- 自动推荐图表、智能分析,这个新出的分析工具有点酷!
- 【BUAA_CO_LAB】p5p6碎碎念
- 红外线解码 VS1838B接头 12864液晶 51单片机 合众之星万能遥控器
- 解决:点击鼠标右键无新建选项卡
- stm32 USB HID多点触摸屏上报安卓触摸信号
- mysql通过触发器获取数据表的操作id_MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录...
- 郭敏:高速公路“过山车”式限速乱象的根本并非技术问题,而是管理协作机制缺位...
- testcenter自动化
- vue生成app二维码,并扫码下载app
- 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作
- MATLAB 输入和输出参数
- Java 中的大根堆和小根堆
- 生态学研究机构之中山大学
- 使用scrapy爬虫框架来获取腾讯的招聘信息
热门文章
- php 什么情况下加异常,PHP中的异常
- 计算机系统结构安全检测,信息安全体系结构安全测评实验报告.doc
- Linux创建页表内存代码,Linux内存管理的源码实现
- Geatpy自定义初始种群
- c语言二维数组总成绩,c语言5个人3科成绩总分和平均分,用二维数组
- php位运算符与逻辑运算_位运算符及PHP中位运算的应用笔记
- vs2019编译c语言提示有病毒,关于VS2019代码编译的问题(C++)
- 学习linux装,一个初学者的Linux学习之旅之Linux安装篇
- mpvue中使用vant-weapp
- 萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks...