千家信息网

Spark Streaming怎样使用Kafka保证数据零丢失

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Spark Streaming怎样使用Kafka保证数据零丢失,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。spark_stream
千家信息网最后更新 2026年11月03日Spark Streaming怎样使用Kafka保证数据零丢失

Spark Streaming怎样使用Kafka保证数据零丢失,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

spark_streaming使用kafka保证数据零丢失

spark streaming从1.2开始提供了数据的零丢失,想享受这个特性,需要满足如下条件:

1.数据输入需要可靠的sources和可靠的receivers

2.应用metadata必须通过应用driver checkpoint

3.WAL(write ahead log)

##可靠的sources和receivers

spark streaming可以通过多种方式作为数据sources(包括kafka),输入数据通过receivers接收,通过replication存储于spark中(为了faultolerance,默认复制到两个spark executors),如果数据复制完成,receivers可以知道(例如kafka中更新offsets到zookeeper中)。这样当receivers在接收数据过程中crash掉,不会有数据丢失,receivers没有复制的数据,当receiver恢复后重新接收。

##metadata checkpoint

可靠的sources和receivers,可以使数据在receivers失败后恢复,然而在driver失败后恢复是比较复杂的,一种方法是通过checkpoint metadata到HDFS或者S3。metadata包括:

  • configuration

  • code

  • 一些排队等待处理但没有完成的RDD(仅仅是metadata,而不是data)

这样当driver失败时,可以通过metadata checkpoint,重构应用程序并知道执行到那个地方。

##数据可能丢失的场景

可靠的sources和receivers,以及metadata checkpoint也不可以保证数据的不丢失,例如:

  • 两个executor得到计算数据,并保存在他们的内存中

  • receivers知道数据已经输入

  • executors开始计算数据

  • driver突然失败

  • driver失败,那么executors都会被kill掉

  • 因为executor被kill掉,那么他们内存中得数据都会丢失,但是这些数据不再被处理

  • executor中的数据不可恢复

##WAL

为了避免上面情景的出现,spark streaming 1.2引入了WAL。所有接收的数据通过receivers写入HDFS或者S3中checkpoint目录,这样当driver失败后,executor中数据丢失后,可以通过checkpoint恢复。

##At-Least-Once 尽管WAL可以保证数据零丢失,但是不能保证exactly-once,例如下面场景:

  • Receivers接收完数据并保存到HDFS或S3

  • 在更新offset前,receivers失败了

  • Spark Streaming以为数据接收成功,但是Kafka以为数据没有接收成功,因为offset没有更新到zookeeper

  • 随后receiver恢复了

  • 从WAL可以读取的数据重新消费一次,因为使用的kafka High-Level消费API,从zookeeper中保存的offsets开始消费

##WAL的缺点 通过上面描述,WAL有两个缺点:

  • 降低了receivers的性能,因为数据还要存储到HDFS等分布式文件系统

  • 对于一些resources,可能存在重复的数据,比如Kafka,在Kafka中存在一份数据,在Spark Streaming也存在一份(以WAL的形式存储在hadoop API兼容的文件系统中)

##Kafka direct API 为了WAL的性能损失和exactly-once,spark streaming1.3中使用Kafka direct API。非常巧妙,Spark driver计算下个batch的offsets,指导executor消费对应的topics和partitions。消费Kafka消息,就像消费文件系统文件一样。

1.不再需要kafka receivers,executor直接通过Kafka API消费数据

2.WAL不再需要,如果从失败恢复,可以重新消费

3.exactly-once得到了保证,不会再从WAL中重复读取数据

主要说的是spark streaming通过各种方式来保证数据不丢失,并保证exactly-once,每个版本都是spark streaming越来越稳定,越来越向生产环境使用发展。

关于Spark Streaming怎样使用Kafka保证数据零丢失问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 保证 消费 文件 两个 可以通过 系统 问题 存储 应用 更新 输入 成功 内存 场景 性能 方式 方法 更多 缺点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 哈尔滨大商圈互联网科技有限公司 互联网巨头反垄断金融科技 互联网与科技发展 合肥互联网科技公司 以房互联网科技 腾讯科技 互联网女皇 友谊互联网络科技 上海电发互联网科技有限公司 互联网科技有哪些公司 移动互联网科技公司 玉溪互联网科技怎么选 明优互联网科技有限公司 中和天地互联网科技有限公司 伍佰万互联网科技怎么赚钱 易企秀互联网科技是做什么的 全球科技与互联网公司市值变化 长沙渺峰互联网科技有限公司 中国主要互联网科技公司 如何强化互联网金融科技 互联网科技有限公司 互联网金融公司科技 互联网科技博客 小米互联网科技园设置 贵州叶脉互联网科技有限公司所属行业 米聚互联网科技南京有限公司排面 江苏苏星互联网科技有限公司 易企秀互联网科技是做什么的 互联网科技企业商标注意事项 互联网 科技节活动 微视频大赛
0