Spark Streaming 遇到 kafka


站酷 | 插画

搭建流程略,主要讲一下如何更好的结合使用,看图说话。

Kafka 结合 Spark Streaming 实现在线的准实时流分析,除了保证数据源和数据接收的可靠性,还要保证元数据的 checkpoint 。


以上的方案,不能防止数据的丢失。

Executor 收到数据后开始执行任务了。但是这时候 Driver 挂掉了,相应的 Executor 进程也会被 kill 掉,数据就会丢失。

为了防止上面这种数据丢失,Spark Streaming 1.2开始引入了WAL机制

启用了WAL机制,已经接收的数据被接收器写入到容错存储中,比如HDFS或者S3。由于采用了WAl机制,Driver可以从失败的点重新读取数据,即使Exectuor中内存的数据已经丢失了。在这个简单的方法下,Spark Streaming提供了一种即使是Driver挂掉也可以避免数据丢失的机制。

At-least-once语义

接收器接收到输入数据,并把它存储到WAL中;接收器在更新Zookeeper中Kafka的偏移量之前突然挂掉了;这是就会出现数据被处理 2 次的情况。

终极解决方案 Kafka Direct API

为了解决由WAL引入的性能损失,并且保证 exactly-once 语义,Spark Streaming 1.3中引入了名为Kafka direct API

好处:

不再需要接收器,Executor 直接从 Kafka 中采用 Sample Consumer API 消费数据。

不再需要WAL机制,我们仍然可以从失败恢复之后从Kafka中重新消费数据。

exactly-once语义得以保存,我们不再从WAL中读取重复的数据。

综合以上,direct 模式比receive模式的优点:

1、简化并行读取:如果要读取多个partition,不需要创建多个输入DStream,然后对它们进行union操作。Spark会创建跟Kafka partition一样多的RDD partition,并且会并行从Kafka中读取数据。所以在Kafka partition和RDD partition之间,有一个一对一的映射关系。

2、高性能:如果要保证零数据丢失,在基于receiver的方式中,需要开启WAL机制。这种方式其实效率低下,因为数据实际上被复制了两份,Kafka自己本身就有高可靠的机制会对数据复制一份,而这里又会复制一份到WAL中。而基于direct的方式,不依赖Receiver,不需要开启WAL机制,只要Kafka中作了数据的复制,那么就可以通过Kafka的副本进行恢复。

3、一次且仅一次的事务机制:基于receiver的方式,是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset的。这是消费Kafka数据的传统方式。这种方式配合着WAL机制可以保证数据零丢失的高可靠性,但是却无法保证数据被处理一次且仅一次,可能会处理两次。因为Spark和ZooKeeper之间可能是不同步的。基于direct的方式,使用kafka的简单api,Spark Streaming自己就负责追踪消费的offset,并保存在checkpoint中。Spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。由于数据消费偏移量是保存在checkpoint中,因此,如果后续想使用kafka高级API消费数据,需要手动的更新zookeeper中的偏移量。

推荐阅读

kafka 上新

Zookeeper 的恢复模式,广播模式,选举流程

Hadoop HA 深度解剖

HBase 数据模型,体系架构,组件功能说明等总结

PageRank 算法,搜索引擎的关键技术


如果对您有帮助,欢迎点赞、关注、转发。

Spark Streaming 遇到 kafka相关推荐

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

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

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

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

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

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

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

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

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

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

  6. spark kafka java api_java实现spark streaming与kafka集成进行流式计算

    java实现spark streaming与kafka集成进行流式计算 2017/6/26补充:接手了搜索系统,这半年有了很多新的心得,懒改这篇粗鄙之文,大家看综合看这篇新博文来理解下面的粗鄙代码吧, ...

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

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

  8. spark streaming 整合kafka 报错 KafkaConsumer is not safe for multi-threaded access

    问题描述 spark streaming 使用 直连方式 读取kafka 数据,使用窗口时出现 java.util.ConcurrentModificationException: KafkaCons ...

  9. spark streaming运行kafka数据源

    一.Kafka准备工作 Kafka的安装,请看另外一文,一定要选择和自己电脑上已经安装的scala版本号一致才可以,本教程安装的Spark版本号是1.6.2,scala版本号是2.10,所以,一定要选 ...

最新文章

  1. 2011最有用最潮的jQuery特效教程,前端们抱走吧~
  2. Android开发--多线程中的Handler机制/Looper的介绍
  3. c语言双分支结构运算符,c语言——运算符、分支结构、循环结构
  4. npoi 所有列调整为一页_必能用到,一页PPT中想放超多图片怎么办?
  5. 对话系统(三)- 优化方法
  6. 服务器系统架构的评估,系统架构师:性能评估
  7. 双子星IPTV管理系统源码
  8. android图片异步加载解决步骤
  9. Java远程连接阿里云MySQL_阿里云配置mysql远程连接
  10. [Storage]RPM series linux rescan disk / RPM系Linux重新扫描硬盘
  11. idea运行web项目光标乱跳
  12. 刚刚!蚂蚁全部互联网存款产品下架;阿里辟谣:被中央联合调查纯属谣言!...
  13. android studio拨打电话代码,AndroidStudio实现拨打电话和发短信(kotlin)
  14. 八字算命网站源码技术细节解析:使用PHP和JAVA实现的MVC架构、MySQL数据库设计和功能模块介绍
  15. 【jquery】通过降低图片的质量(或尺寸)压缩图片大小
  16. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?
  17. java字符串加密解密工具类
  18. 时间序列分析这件小事(五)--MA模型
  19. 航班信息管理系统(JDBC)
  20. 计算机bios设置翻译,BIOS界面翻译..

热门文章

  1. Centos7安装mysql社区版
  2. 一起Polyfill系列:让Date识别ISO 8601日期时间格式
  3. TCP连接(Time_Wait、Close_Wait)说明
  4. 老师只喜欢好学生(转)
  5. scp 、ssh非22端口的服务器方法
  6. 知乎: 如何评价阿里开源的企业级 Node.js 框架 egg? #18
  7. 微服务系列 —— 一小时搞定Eureka
  8. 面试官系统精讲Java源码及大厂真题 - 43 ThreadLocal 源码解析
  9. 分布式系统面试 - 常见问题
  10. 分布式系统面试 - 幂等性设计