最近工作有点忙,所以更新文章频率低了点,在这里给大家说声抱歉,前面已经写过在spark streaming中管理offset,但当时只知道怎么用,并不是很了解为何要那样用,最近一段时间又抽空看了一个github开源程序自己管理offset的源码,基本已经理解透彻了,当然这里面还包含了由于理解不透彻导致升级失败的一个案例,这个在下篇文章会分享出来。本篇我们先从理论的角度聊聊在Spark Streaming集成Kafka时的offset状态如何管理。
spark streaming 版本 2.1
kafka 版本0.9.0.0
在这之前,先重述下spark streaming里面管理偏移量的策略,默认的spark streaming它自带管理的offset的方式是通过checkpoint来记录每个批次的状态持久化到HDFS中,如果机器发生故障,或者程序故障停止,下次启动时候,仍然可以从checkpoint的目录中读取故障时候rdd的状态,便能接着上次处理的数据继续处理,但checkpoint方式最大的弊端是如果代码升级,新版本的jar不能复用旧版本的序列化状态,导致两个版本不能平滑过渡,结果就是要么丢数据,要么数据重复,所以官网搞的这个东西,几乎没有人敢在生产环境运行非常重要的流式项目。
所以比较通用的解决办法就是自己写代码管理spark streaming集成kafka时的offset,自己写代码管理offset,其实就是把每批次offset存储到一个外部的存储系统里面包括(Hbase,HDFS,Zookeeper,Kafka,DB等等),不用的什么存储系统,
都需要考虑到三种时刻的offset的状态,否则offset的状态不完整,就可能导致一些bug出现。
场景一:
当一个新的spark streaming+kafka的流式项目第一次启动的时候,这个时候发现外部的存储系统并没有记录任何有关这个topic所有分区的偏移量,所以就从 KafkaUtils.createDirectStream直接创建InputStream流,默认是从最新的偏移量消费,如果是第一次其实最新和最旧的偏移量时相等的都是0,然后在以后的每个批次中都会把最新的offset给存储到外部存储系统中,不断的做更新。
场景二:
当流式项目停止后再次启动,会首先从外部存储系统读取是否记录的有偏移量,如果有的话,就读取这个偏移量,然后把偏移量集合传入到KafkaUtils.createDirectStream中进行构建InputSteam,这样的话就可以接着上次停止后的偏移量继续处理,然后每个批次中仍然的不断更新外部存储系统的偏移量,这样以来就能够无缝衔接了,无论是故障停止还是升级应用,都是透明的处理。
场景三:
对正在运行的一个spark streaming+kafka的流式项目,我们在程序运行期间增加了kafka的分区个数,请注意:这个时候新增的分区是不能被正在运行的流式项目感应到的,如果想要程序能够识别新增的分区,那么spark streaming应用程序必须得重启,同时如果你还使用的是自己写代码管理的offset就千万要注意,对已经存储的分区偏移量,也要把新增的分区插入进去,否则你运行的程序仍然读取的是原来的分区偏移量,这样就会丢失一部分数据。
总结:
如果自己管理kafka的偏移量,一定要注意上面的三个场景,如果考虑不全,就有可能出现诡异的问题。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
这个小项目专注于手动管理Spark Streaming在处理Kafka数据时的偏移量,并将其存储在Zookeeper中,以便于跟踪和管理数据消费状态。以下是关于这个项目的详细知识点: **1. Spark Streaming** Spark Streaming是...
如果ZooKeeper中存在保存的偏移量,则可以根据这些偏移量继续消费数据;如果没有,则从头开始消费。 - **处理数据**:通过`foreachRDD`方法处理接收到的数据,并打印出来。 #### 7. 总结 通过以上介绍,我们了解到...
它是一个分布式协调服务,用于管理 Kafka 的元数据,包括主题(topics)、分区(partitions)和偏移量(offsets)。在Kafka消费者中,使用Zookeeper来存储和同步消费者的offset是非常常见的做法。这样可以确保消息的...
一个完善的Spark Streaming二次封装开源框架,包含:实时流任务调度、kafka偏移量管理,web后台管理,web api启动、停止spark streaming,宕机告警、自动重启等等功能支持,用户只需要关心业务代码,无需关注繁琐的...
`SparkStreaming.zip` 文件可能包含了一个示例项目,演示了如何创建一个 Spark Streaming 应用来从 Kafka 消费数据。代码通常会包含以下步骤: 1. 创建 SparkConf 对象,配置 Spark 应用的属性,如应用程序名称、...
下面是使用过程中记录的一些心得和博客,感兴趣的朋友可以了解下:项目简介该项目提供了一个在使用spark streaming2.3+kafka1.3的版本集成时,手动存储偏移量到zookeeper中,因为自带的checkpoint弊端太多,不利于...
除了消息本身,还可以通过API访问Kafka的消息元数据,如分区信息和偏移量。这有助于跟踪和管理消费进度,确保不会丢失或重复消息。 **性能优化** Spark与Kafka的集成还支持并行读取,可以利用多个工作节点同时从...
2. **设置偏移量管理**:Spark Streaming负责管理和更新Kafka的消费偏移量。可以使用`offsetRanges`来跟踪处理过的数据,确保数据的正确处理和不丢失。 3. **数据转换与处理**:获取到DStream后,可以应用各种操作...
该项目提供了一个在使用spark streaming2.1+kafka0.9.0.0的版本集成时,手动存储偏移量到zookeeper中,因为自带的checkpoint弊端太多,不利于 项目升级发布,并修复了一些遇到的bug,例子中的代码已
:party_popper:v1.6.0-0.10 解决了批次计算延迟后出现的任务append导致整体恢复后 计算消费还是跟不上的...支持rdd.updateOffset 来管理偏移量。 :party_popper: v1.6.0-0.10_ssl 只是结合了 sparkstreaming 1.6 和 ka
- **滑动时间间隔**:指相邻两个窗口之间的偏移量,同样也是批处理时间间隔的整数倍。通过调整滑动时间间隔,可以控制窗口的重叠程度。 - **Input DStream**:一种特殊的 DStream 类型,用于从外部数据源(如 Kafka...
偏移量和处理故障。 这个消费者已经实现了一个自定义可靠接收器,它使用 Kafka Consumer API 从 Kafka 获取消息并将每个接收到的块存储在 Spark BlockManager 中。 该逻辑将自动检测主题的分区数量,并根据配置的...
Spark Streaming二次封装开源框架 - 基于Scala和Java构建,包含1157个文件,提供实时流任务调度、Kafka偏移量管理、Web后台管理、Web API控制等功能。该框架简化业务开发流程,让开发者专注于业务逻辑,无需担心底层...
【IPMap文件.docx】的描述中涉及到的知识点主要集中在使用Apache Spark Streaming处理Kafka数据流,特别是关于偏移量的管理和Kafka消费者配置。以下是详细的解释: 1. **Apache Spark Streaming**: - `...
Spark Streaming 是一个基于 Spark Core 之上的实时计算框架,可以从很多数据源消费数据并对数据进行处理。在 Spark Streaming 中,有一个最基本的抽象叫 DStream(代理),本质上就是一系列连续的 RDD,DStream ...
这段内容主要涉及到了Kafka的配置、主题创建以及Spark Streaming的应用。接下来将详细解释这些知识点。 ### 1. Apache Kafka 基础配置 #### 创建主题 在Apache Kafka中,通过`kafka-topics.sh`命令可以实现主题...
10.消费Kafka偏移量管理 第六章、StructuredStreaming模块 1.StructuredStreaming 概述(核心设计和编程模型) 2.入门案例:WordCount 3.输入源InputSources 4.Streaming Query 设置 5.输出终端OutputSink 6.集成...
- **实时分析**: 结合Spark Streaming或Flink等流处理框架,实时处理Kafka中的数据流,进行实时分析和决策。 - **微服务通信**: 在微服务架构中,Kafka可以作为一个消息中间件,允许服务之间异步通信,提高系统的可...
5. 消费者处理完消息后,提交偏移量,告知Kafka已消费。 五、Kafka的应用场景 1. 日志收集:Kafka可以作为日志收集系统的中间件,收集各种应用的日志数据。 2. 流式处理:与Spark Streaming或Flink等流处理框架结合...
5. ** offsets管理**:每个消费者记录其读取的每个分区的偏移量(offset),以便下次从上次读取的位置继续。 6. **Zookeeper集成**:Kafka使用Zookeeper来协调集群,管理元数据,例如分区的主副本选举。 7. **可...