分享一些Spark Streaming在使用中关于高吞吐和高可靠的优化。

作为Spark的流式处理框架,Spark Streaming基于微批RDDs实现,需要7*24小时运行。在实践中,我们需要通过不断的优化来保证它的高可靠,高吞吐。

本文从高吞吐和高可靠两个角度来简单介绍一下Spark Streaming中常用的一些优化方式。

1. 高吞吐的优化方式

1.1 更改序列化的方式

Spark在变量落盘或者序列化的时候会涉及到序列化。

Spark提供了Java自带的序列化和Kryo序列化。Kyro序列化比Java序列化更快,推荐使用Kyro序列化。

在Spark2.0后将Kyro序列化作为简单类型的默认序列化方式。对于我们自己的类,可以通过registerKyroClasses来注册。

1.2 修改Receiver接受到的数据的存储级别

Spark Streaming通过Receiver来接收数据,接收后会以StorageLevel.MEMORY_AND_DISK_SER_2的存储级别来存储数据。

将接收到的数据存储两份是为了有更好的容错性,如果你的Streaming程序做了其他的容错,就可以修改为其他的存储级别。

1.3 广播配置变量

对于要在多个Executor中都会用到的变量,可以将变量广播到每个节点上,减少数据传输的开销。

1.4 调大接收器的个数

对数据有序性要求不是很高的场景下,可以多起几个接收器来接收数据。

1.5 设置合理的批处理间隔

对于Streaming系统来说,只有系统的处理速度能赶上接受速度,整个系统才能稳定的运行,不然可能会出现OOM等问题。

批处理间隔的设置可以根据自己的数据量、处理速度、业务峰值等指标来合理估算一个适合自己的。

1.6 多给点资源

这是最基本的了,多分点CPU、内存,吞吐量蹭蹭的就上来了。

1.7 内存比例管理

内存主要用来存储和计算,可以根据自己的场景调整内存的占比。

1.8 垃圾回收机制

基于JVM运行的程序都能通过垃圾回收调优来获得一定的优化。

根据自己的场景选择使用CMS、G1....

1.9 使用合适的算子

对于要读写数据库的场景,肯定是在每个foreachPartition中维护一个连接,而不是每个foreach维护一个。

map和mapPartition同理了。

1.10 反压机制

上游太快,压力太大怎么办。

Spark Streaming中也提供了反压机制,可以设置参数来开启反压机制。

2. 高可靠的保障

2.1 可重放的上游

有个可重放的上游,就不是很怕丢数据了,起码可以保证至少一次。

2.2 checkpoint

通过开启checkpoint将元数据写到文件中,在程序失败重启后可以直接读取checkpoint

2.3 wal

预写日志。

上面也提到了Recevier会将接收到的数据存两份,但是那个可能会丢数据。

如果对可靠性要求较高,还是老老实实的开启wal,缺点就是会损失吞吐量。

2.4 对运行状况做监控

这个的话方法就多了:

  • 记得Spark Streaming提供了一个接口,在每个批次处理前后可以做处理。感兴趣的可以研究。
  • 写脚本对streaming程序进行监控报警
  • .....

3. 参考

  • 《Spark Streaming实时流式大数据处理实践》

Spark Streaming高吞吐、高可靠的一些优化的更多相关文章

  1. 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)

    高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015   Java NIO成功的应用在了各种分布式.即时通信和中 ...

  2. spark streaming限制吞吐

    使用spark.streaming.receiver.maxRate这个属性限制每秒的最大吞吐.官方文档如下: Maximum rate (number of records per second) ...

  3. 高吞吐低延迟Java应用的垃圾回收优化

    高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...

  4. kafka高吞吐,低延迟的分布式消息队列

    核心概念 broker是kafka的节点,多台broker集群就是kafka topic消息分为多个topic partition分区,topic划分了多个partition分区,存在负载均衡策略 每 ...

  5. 论文阅读计划1(Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming & An Enforcement of Real Time Scheduling in Spark Streaming & StyleBank: An Explicit Representation for Neural Ima)

    Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming[1] 简介:雅虎发布的一份各种流处理引擎的基准 ...

  6. Spark Streaming资源动态分配和动态控制消费速率

    本篇从二个方面讲解: 高级特性: 1.Spark Streaming资源动态分配 2.Spark Streaming动态控制消费速率 原理剖析,动态控制消费速率其后面存在一套理论,资源动态分配也有一套 ...

  7. 攻克数据库核心技术壁垒,实现百万级QPS的高吞吐

    CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库.融合了传统数据库.云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限存储,价格仅为商用数据库的1/10. C ...

  8. Kafka是如何实现高吞吐率的

    Kafka是如何实现高吞吐率的 原创 2016-02-27 杜亦舒 性能与架构 Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的 ...

  9. dotnet core高吞吐Http api服务组件FastHttpApi

    简介 是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服 ...

随机推荐

  1. Least Cost Bracket Sequence,题解

    题目链接 题意: 给你一个含有(,),?的序列,每个?变成(或)有一定的花费,问变成课匹配的括号的最小花费. 分析: 首先如果能变成匹配的,那么就有右括号的个数始终不多于左括号且左右括号数量相等,那就 ...

  2. 弹性碰撞问题:Ants+Linear world

    题目一:Ants 传送门 题目描述 输入 输出 样例 样例输入 样例输出 分析 一句话题意:有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂 ...

  3. unity spine 对翻转和大小的控制

    spine-unity怎么决定我的Spine模型的大小? Spine使用 1像素:1单位.意思是,如果你只是包含图像在你的骨架中,并且没有任何旋转和缩放,在Spine中该图像的1个像素就对应1个单位高 ...

  4. BUUCTF-Misc-No.3

    比赛信息 比赛地址:Buuctf靶场 内心os(蛮重要的) 我只想出手把手教程,希望大家能学会然后自己也成为ctf大佬,再来带带我QWQ 文件中的秘密 | SOLVED | 打开文件,winhex照妖 ...

  5. HDFS读写流程(重点)

    @ 目录 一.写数据流程 举例: 二.异常写流程 读数据流程 一.写数据流程 ①服务端启动HDFS中的NN和DN进程 ②客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件 ③NN ...

  6. TP5中的缓存使用

    Thinkphp 5.0采用了 think\Cache 类来提供缓存支持 缓存支持采用驱动方式,所以缓存在使用之前,需要进行连接操作,也就是缓存初始化操作. 支持的缓存类型包括file.memcach ...

  7. SpringBoot入门详细教程

    一.SpringBoot入门 1.SpringBoot简介 SpringBoot是整个Spring技术栈的整合,来简化Spring应用开发,约定大于配置,去繁从简,just run 就能创建一 个独立 ...

  8. 数据可视化之powerBI基础(十三)熟练使用Power BI的日期切片器

    https://zhuanlan.zhihu.com/p/64416522 交互式设计可以让用户使用的过程中更具参与感,在PowerBI中经常用到的交互方式就是切片器,利用它可以从不同维度查看数据,切 ...

  9. CRM开发系列

    CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的 ...

  10. 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:我年龄的立方是个4位数。 我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 结果只有一个数。

    #include<stdio.h>int main(){ int age=1; int san=0; int si=0; int sum=0; while(age>0) { san= ...