一种基于内存计算的流式数据处理模型

一种基于内存计算的流式数据处理模型

介绍

​ 这是一种基于Spark内存计算框架的实时流式处理模型,可用于预处理数据、实时数据统计、实时数据分析等方面。

组成

以下,是这个流式数据处理模型的重要组成部分:

  • Spark Streaming
    • Spark流式计算框架
    • 支持多种数据源,如kafka、HDFS、socket等
  • kafka
    • kafka在大数据下的延时是接近1ms级别,因此,用于传输实时数据非常合适
    • 通过调参,能够保证大量数据中的出现数据丢失的机率接近于0

重要概念

Spark Streaming

​ sparkStreaming是spark中用于实时计算的一个模块,可以实现低延时,零丢失等目标。sparkStreaming是一种流式计算架构,支持多种数据源,如HDFS数据文件、Socket数据、分布式消息系统kafka的数据等。总而言之,支持多种常见的数据源。sparkStreaming有两种计算模型,一种是基于receiver,另一种是direct,以下,讲解一下这两种模型。

1、receiver(AWL)

img

​ 这是kafka与streaming结合的基本方式,如图spark集群中的 worker节点中 exeutor线程里的 receiver接口会一直消费kafka中的数据,那么问题来了,假如我们定义5秒消费一次,如果spark集群定义了每个worker使用的cpu资源不足以消费完了这5秒的数据,那么就会出现数据的丢失,消费不了的那些数据就没了,并且streaming一经启动会一直循环消费拉取资源,如果出现上述问题,分配的cpu不足以消费5秒拉取的数据,那么丢失的数据便会越积越多,这在程序里是严重的bug。

​ 上面那种图说的就是awl方式,这种方式是以前常用的方式,我们在程序里对streamingContext初始化后,得到他的对象进行checkpoint(“hdfs://xxxx/xx”) 即可,这样程序会默认把日志偏移量存到hdfs上面做备份,防止数据丢失,但是这样会影响性能。

2、direct

img

​ direct方式是直接获取流进行消费处理,速度快、延时低下,可靠性强,当然,要实现数据的最为可靠性,最好不要使用自动提交,因为自动提交如果处理出现问题,还是会出现数据丢失。同时,要注意一些幂等操作。

3、demo

  • 官方demo
/ The details depend on your data store, but the general idea looks like this

// begin from the the offsets committed to the database
Map<TopicPartition, Long> fromOffsets = new HashMap<>();
for (resultSet : selectOffsetsFromYourDatabase)
  fromOffsets.put(new TopicPartition(resultSet.string("topic"), resultSet.int("partition")), resultSet.long("offset"));
}

JavaInputDStream<ConsumerRecord<String, String>> stream = KafkaUtils.createDirectStream(
  streamingContext,
  LocationStrategies.PreferConsistent(),
  ConsumerStrategies.<String, String>Assign(fromOffsets.keySet(), kafkaParams, fromOffsets)
);

stream.foreachRDD(rdd -> {
   
  //这一步获取必须是rdd的偏移值获取最先操作,否则会出现偏移值等出错的问题
  OffsetRange[] offsetRanges = ((HasOffsetRanges) rdd.rdd
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值