Fork me on GitHub

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


最新评论

    还没有人评论...

当当

友情链接

Powered by Python. Copyright © 2017.

鄂ICP备17010875号. All rights reserved.