2019独角兽企业重金招聘Python工程师标准>>>

一:传统事务概念

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

特性:事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

二:spark Streaming中的事务

1. Exactly once容错

  2. 数据输出不重复

一. 事务场景 :

  以银行转帐一次为例,A用户转账给B用户,如何保证事务的一致性,即A用户能够转出且只能转出一次,B用户能够收到且只能收到一次。  

二.  Exactly once容错:

  事务处理中如何保证能够处理且只能处理一次,数据能够输出且只能输出一次。

  数据丢失的主要场景如下:

    在Receiver收到数据且通过Driver的调度,Executor开始计算数据的时候如果Driver突然奔溃(导致Executor会被Kill掉),此时Executor会被Kill掉,那么Executor中的数据就会丢失。

 1. 事务处理如下图 :

事务处理过程解析 : 

01.  InputStream : 输入数据

02.  Executor : 通过Receiver接收数据,当接收到数据后向Driver 汇报

03.  Driver : 通过StreamingContext接收到数据会启动Job进行操作

2.  解决事务源数据接收的安全性 :

事务处理解析 :

01.  Executor : 在Receiver接收来自Kafka数据首先通过BlockManager写入内存+磁盘或者通过WAL来保证数据的安全性;

02.  Executor  : 通过Replication完成后产生Ack信号;

03.  Kafka : 确定收信息并读取下一条数据,Kafka才会进行updateOffsets操作 ;

04.  通过WAL机制让所有的数据通过类似HDFS的方式进行安全性容错处理,从而解决Executor被Kill掉后导致数据丢失可以通过WAL机制恢复回来。

3.  解决Driver数据输出的安全性 :

数据的处理怎么保证有且仅有被处理一次?

数据零丢失并不能保证Exactly Once,如果Receiver接收且保存起来后没来得及更新updateOffsets时,就会导致数据被重复处理。

01.  通过StreamingContext接收数据通过CheckPoint进行容错 ;

02. logging the updates : 通过记录跟踪所有生成RDD的转换(transformations)也就是记录每个RDD的lineage(血统)来重新计算生成丢失的分区数据 ;

4.  Exactly Once的事务处理 :

01、 数据零丢失:必须有可靠的数据来源和可靠的Receiver,且整个应用程序的metadata必须进行checkpoint,且通过WAL来保证数据安全;

02、Spark Streaming 1.3的时候为了避免WAL的性能损失和实现Exactly Once而提供了Kafka Direct API,把Kafka作为文件存储系统!!

03、此时兼具有流的优势和文件系统的优势,Spark Streaming+Kafka就构建了完美的流处理世界!!!

04、 数据不需要copy副本,不需要WAL性能损耗,不需要Receiver,所有的Executors直接通过kafka direct api直接消费数据,直接管理Offset,所以也不会重复消费数据;

三.   Spark Streaming数据输出多次重写及解决方案:

  1、 为什么会有这个问题,因为SparkStreaming在计算的时候基于SparkCore,SparkCore天生会做以下事情导致SparkStreaming的结果(部分)重复输出:

1、Task重试;

2、慢任务推测;

3、Stage重复;

4、Job重试;

等会导致数据的丢失。

2、 对应的解决方案:

1、一个任务失败就是job 失败,设置spark.task.maxFailures次数为1;

2、设置spark.speculation为关闭状态(因为慢任务推测其实非常消耗性能,所以关闭后可以显著的提高Spark Streaming处理性能)

3、Spark streaming on kafka的话,假如job失败后可以设置kafka的auto.offset.reset为largest的方式会自动恢复job的执行。

最后再次强调: 可以通过transform和foreachRDD基于业务逻辑代码进行逻辑控制来实现数据不重复消费和输出不重复!这二个方法类似于spark streaming的后门,可以做任意想象的控制操作!

转载于:https://my.oschina.net/u/1253652/blog/669374

Spark Streaming事务相关推荐

  1. Spark Streaming之容错机制以及事务语义

    我们知道RDD本身是一个不可变的,可重新计算的.分布式的数据集.每一个RDD都会记住确定好的操作血缘关系. 如果因为某些原因,导致某个worker节点失败,则导致RDD的某个partition数据丢失 ...

  2. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver

    [TOC] 实时WordCount案例 主要是监听网络端口中的数据,并实时进行wc的计算. Java版 测试代码如下: package cn.xpleaf.bigdata.spark.java.str ...

  3. string 中的offset_Kafka+Spark Streaming管理offset的几种方法

    来源:大数据技术与架构作者:王知无 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By 大数据技术与架构 场景描述:Kafka配合Spark St ...

  4. Spark Streaming的Exactly-One的事务处理

    输出不重复 事务 银行转帐为例,A用户转账给B用户,B用户可能收到多笔钱,如何保证事务的一致性,也就是说事务输出,能够输出且只会输出一次,即A只转一次,B只收一次. 从事务视角解密SparkStrea ...

  5. Spark Streaming 遇到 kafka

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

  6. Spark Streaming之Kafka的Receiver和Direct方式

    一 Receiver方式 Receiver是使用Kafka的high level的consumer API来实现的.Receiver从Kafka中获取数据都是存储在Spark Executor内存中的 ...

  7. Spark Streaming 和 Flink 的对比以及详细描述,图文对比、代码

    本文从编程模型.任务调度.时间机制.Kafka 动态分区的感知.容错及处理语义.背压等几个方面对比 Spark Streaming 与 Flink,希望对有实时处理需求业务的企业端用户在框架选型有所启 ...

  8. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...

  9. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...

    随着互联网技术的迅速发展,用户对于数据处理的时效性.准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战. 自2015年携程实时计算平台 ...

最新文章

  1. centos rsyslog mysql_centos7+rsyslog+loganalyzer+mysql 搭建rsyslog日志服务器
  2. ShopXO本地化部署安装之centeros 安装Apache2.4.6 + PHP7.0.33 + Mysql5.7.25环境
  3. Android设计模式之——单例模式
  4. php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考
  5. 并发并行,异步同步,阻塞非阻塞
  6. Leetcode算法题(C语言)15--字符串中的第一个唯一字符
  7. SpringBoot入门-自动配置原理
  8. 分拣外观残缺的机器人_【移动机器人(AGV)联盟一周要闻】
  9. 大学生计算机应用论文,大学生计算机应用论文(共1178字).doc
  10. 【毕设教学】单片机控制步进电机
  11. MAPGIS提示请在“系统设置”里设置好系统库路径(SUVSLIB或者其他)再重新运行程序
  12. $body.on(‘click‘,‘button‘,function() {中.on在这里是什么意思的
  13. HIVE性能调优总结
  14. 通灵学院|游戏设计研习10:迭代流程★(2000字)
  15. 手把手教你实现热力图!
  16. 解决json字符串转为对象时LocalDateTime异常问题
  17. 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...
  18. 植发搞笑图片_植发失败实例:头发没长出来还更秃了?詹姆斯也没能幸免,可怕...
  19. 计算机组成原理中阶符是什么,计算机组成原理习手册.doc
  20. 设计模式 - 创建型模式_原型模式

热门文章

  1. VC++图片框控件静态和动态加载位图
  2. win32汇编处理字符消息和给常量区标号赋值
  3. 5 网络层----IP协议相关技术
  4. [Xcode 实际操作]六、媒体与动画-(3)使用CoreImage框架设置图片的单色效果
  5. videoJS如何用
  6. php中读取大文件实现方法详解
  7. JS中获得窗口属性的方法
  8. 神经网络迭代次数与Lambert定律
  9. yum 安装PHP之后如何启动,如何用yum安装php_后端开发
  10. dropout层_深度学习两大基础Tricks:Dropout和BN详解