一 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方式相关推荐

  1. Spark Streaming读取Kafka数据的两种方式

    Kafka在0.8和0.10之间引入了一种新的消费者API,因此,Spark Streaming与Kafka集成,有两种包可以选择: spark-streaming-kafka-0-8与spark-s ...

  2. Spark Streaming使用Kafka保证数据零丢失

    为什么80%的码农都做不了架构师?>>>    源文件放在github,随着理解的深入,不断更新,如有谬误之处,欢迎指正.原文链接https://github.com/jacksu/ ...

  3. sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

    Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...

  4. Spark Streaming 遇到 kafka

    Spark Streaming 遇到 kafka 站酷 | 插画 搭建流程略,主要讲一下如何更好的结合使用,看图说话. Kafka 结合 Spark Streaming 实现在线的准实时流分析,除了保 ...

  5. 根据官网文档看Spark Streaming对接Kafka的两种方式, 以及如何实现Exactly Once语义

    注: 本文算是本人的学习记录, 中间可能有些知识点并不成熟, 不能保证正确性. 只能算是对官网文档作了个翻译和解读, 随时有可能回来更新和纠错 上一篇文章讨论了Spark Streaming的WAL( ...

  6. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  7. spark streaming 消费 kafka入门采坑解决过程

    kafka 服务相关的命令 # 开启kafka的服务器 bin/kafka-server-start.sh -daemon config/server.properties & # 创建top ...

  8. Spark Streaming 实战案例(五) Spark Streaming与Kafka

    主要内容 Spark Streaming与Kafka版的WordCount示例(一) Spark Streaming与Kafka版的WordCount示例(二) 1. Spark Streaming与 ...

  9. Spark中如何管理Spark Streaming消费Kafka的偏移量

    spark streaming 版本 2.1 kafka 版本0.9.0.0 在这之前,先重述下spark streaming里面管理偏移量的策略,默认的spark streaming它自带管理的of ...

最新文章

  1. wps临时文件不自动删除_win10系统下wps残留文件无法删除如何解决
  2. axure文件如何加密_rp文件命名也可能导致文件无法打开
  3. Tensorflow运行程序报错 FailedPreconditionError
  4. apt-get软件包管理命令 和 apt-key命令
  5. 使用系统调用pipe建立一条管道线_【Linux系统】Linux进程间通信
  6. python的闭包要素_Python的闭包
  7. 自动推荐图表、智能分析,这个新出的分析工具有点酷!
  8. 【BUAA_CO_LAB】p5p6碎碎念
  9. 红外线解码 VS1838B接头 12864液晶 51单片机 合众之星万能遥控器
  10. 解决:点击鼠标右键无新建选项卡
  11. stm32 USB HID多点触摸屏上报安卓触摸信号
  12. mysql通过触发器获取数据表的操作id_MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录...
  13. 郭敏:高速公路“过山车”式限速乱象的根本并非技术问题,而是管理协作机制缺位...
  14. testcenter自动化
  15. vue生成app二维码,并扫码下载app
  16. 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作
  17. MATLAB 输入和输出参数
  18. Java 中的大根堆和小根堆
  19. 生态学研究机构之中山大学
  20. 使用scrapy爬虫框架来获取腾讯的招聘信息

热门文章

  1. php 什么情况下加异常,PHP中的异常
  2. 计算机系统结构安全检测,信息安全体系结构安全测评实验报告.doc
  3. Linux创建页表内存代码,Linux内存管理的源码实现
  4. Geatpy自定义初始种群
  5. c语言二维数组总成绩,c语言5个人3科成绩总分和平均分,用二维数组
  6. php位运算符与逻辑运算_位运算符及PHP中位运算的应用笔记
  7. vs2019编译c语言提示有病毒,关于VS2019代码编译的问题(C++)
  8. 学习linux装,一个初学者的Linux学习之旅之Linux安装篇
  9. mpvue中使用vant-weapp
  10. 萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks...