Spark Streaming高吞吐、高可靠的一些优化
分享一些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高吞吐、高可靠的一些优化的更多相关文章
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
- spark streaming限制吞吐
使用spark.streaming.receiver.maxRate这个属性限制每秒的最大吞吐.官方文档如下: Maximum rate (number of records per second) ...
- 高吞吐低延迟Java应用的垃圾回收优化
高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
- kafka高吞吐,低延迟的分布式消息队列
核心概念 broker是kafka的节点,多台broker集群就是kafka topic消息分为多个topic partition分区,topic划分了多个partition分区,存在负载均衡策略 每 ...
- 论文阅读计划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] 简介:雅虎发布的一份各种流处理引擎的基准 ...
- Spark Streaming资源动态分配和动态控制消费速率
本篇从二个方面讲解: 高级特性: 1.Spark Streaming资源动态分配 2.Spark Streaming动态控制消费速率 原理剖析,动态控制消费速率其后面存在一套理论,资源动态分配也有一套 ...
- 攻克数据库核心技术壁垒,实现百万级QPS的高吞吐
CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库.融合了传统数据库.云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限存储,价格仅为商用数据库的1/10. C ...
- Kafka是如何实现高吞吐率的
Kafka是如何实现高吞吐率的 原创 2016-02-27 杜亦舒 性能与架构 Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的 ...
- dotnet core高吞吐Http api服务组件FastHttpApi
简介 是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服 ...
随机推荐
- 状压DP之吃奶酪
题目 传送们 思路 1≤n≤15,妥妥的状压,数据这么小, 这道题的状压思路还是很好想的,我们定义f[i][s]代表以i为起点,吃掉状态为s的奶酪所需要跑的最短距离,那么显然,我们先枚举状态s,然后枚 ...
- 线性动归之Wooden Sticks
题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...
- 确定比赛名次 UDU-1285 + 逃生 UDU 4857 拓扑排序(找不同)
确定比赛名次 题目大意 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得 ...
- Redis的主从复制(基本入门)
描述 从主节点(主机)到从节点(从机)单向的数据复制 特性(主从复制是Redis高可用的基础) 数据冗余 故障恢复 负载均衡 读写分离(主节点有读写权限,从节点只有读的权限) 注:以下操作都是在cen ...
- day59 pip安装django出错解决方案
在虚拟环境下,输入 pipinstall django ==2.2,安装django,可能会出现超时问题 这里的报错是网络问题,解决方案有如下三种 (1)多试几次,网络好就装上了 (2)Cmd输入 ...
- hacknos靶机实战
工具: kali 192.168.1.6 nmap 打开使用nmap -sP 192.168.1.0/24 扫描活跃的主机 发现目标ip 使用nmap 查看开启了什么服务Nmap -v -A -PN ...
- .Net Core 读取文件中文乱码
首先,要知道.Net Core和.Net Framework两个环境下很多东西是不同的,接下来要说的这个就是其中一个. Encoding.Default,在 .NET Framework 中,Def ...
- 机器学习实战---决策树CART回归树实现
机器学习实战---决策树CART简介及分类树实现 一:对比分类树 CART回归树和CART分类树的建立算法大部分是类似的,所以这里我们只讨论CART回归树和CART分类树的建立算法不同的地方.首先,我 ...
- DEX文件解析--4、dex类的类型解析
一.前言 前几篇系列文章链接: DEX文件解析---1.dex文件头解析 DEX文件解析---2.Dex文件checksum(校验和)解析 DEX文件解析--3.dex文件 ...
- Ethical Hacking - NETWORK PENETRATION TESTING(2)
ALFA AWUS 1900 RTL8814AU https://www.alfa.com.tw/products_detail/2.htm Follow the guide on aircrac ...