spark streaming和kafka相关应用

kafka

优势

  1. kafka相比于其他消息系统能够实现有序的并行化的读取,其他的消息系统如果需要实现有序,是通过独占的形式,那样就不能并行化,每次只能有一个消费者读取数据。
  2. kafka通过topic和partition的方式实现有序的并行化,每个消费者可以独占一个partition,同时多个消费者读取同一个topic的数据,这样就实现了并行化,但是一个消费群组的消费者不能比一个topic的分区数多,这样如果继续保持有序,会导致资源竞争,降低读取并行效率。

概念

  1. kafka 集群包含一个或者多个服务器,这个服务器被称为broker。
  2. 每条发布到kafka集群的消息都有一个类别,这个类别被称为topic。物理上不同topic的消息分开存储,逻辑上一个topic的消息保存在一个或者多个broker上。
  3. partition是物理概念,每个topic包含一个或者多个partition
  4. topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得kafka的吞吐率线性提高,物理上把topic分成一个或者多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有的消息和索引文件。

spark streaming

对比

kafka stream和spark streaming的区别,主要在于kafka stream是流式处理用在kafka到kafka,方便且不用搭建spark集群,而spark streaming作为流式处理方便的用在kafka到其他存储。

建议

一个批次内处理完一批数据,即batch process time应该接近于batch duration,如果batch process time总是比batch duration长,就会不断增加调度延迟时间而且数据也会在内存里堆积,进而增加系统不稳定性;另一方面,如果batch process time总是远远小于batch duration,则集群资源利用率不高,也是一种资源浪费。

反压机制

spark streaming需要使用反压机制的情况:

  1. 首次启动streaming 应用,kafka保留了大量历史消息,并且auto.offset.reset=earliest;可以offset设置为latest,防止第一个batch接收大量消息,处理时间过长和内存溢出。
  2. 防止kafka生产者突然产生大量消息,一个batch接收到大量数据,导致batch之间接收到数据倾斜
  3. spark.streaming.kafka.maxRatePerPartition
    控制spark读取的每个kafka分区最大消息数,每个rdd分区接收的消息量<=batchDuration * spark.streaming.kafka.maxRatePerPartition

1 Spark Streaming增大任务并发度
Q: 在Spark Streaming中,增大任务并发度的方法有哪些?
A: s1 core的个数: task线程数,也就是–executor-cores
s2 repartition
s3 Streaming + Kafka,Direct方式,则增加partition分区数
s4 Streaming + Kafka,Receiver方式,则增加Receiver个数
s5 reduceByKey和reduceByKeyAndWindow传入第二个参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值