• DirectStream、Stream的区别-SparkStreaming源码分析02


    转http://hadoop1989.com/2016/03/15/KafkaStreaming/

    在Spark1.3之前,默认的Spark接收Kafka数据的方式是基于Receiver的,在这之后的版本里,推出了Direct Approach,现在整理一下两种方式的异同。

    1. Receiver-based Approach

    示例代码:

    import org.apache.spark.streaming.kafka._
    

    val kafkaStream = KafkaUtils.createStream(streamingContext,

     [ZK quorum], [consumer group id], [per-topic number of Kafka partitions to consume])
    

    2. Direct Approach (No Receivers)

    示例代码:

     import org.apache.spark.streaming.kafka._
    
     val directKafkaStream = KafkaUtils.createDirectStream[
     [key class], [value class], [key decoder class], [value decoder class] ](
     streamingContext, [map of Kafka parameters], [set of topics to consume])
    

    源码实现

    1、 KafkaUtils.createStream

    首先从源码层面来看,其主要调用栈顺序:

    KafkaUtils.createStream--->createStream--->new KafkaInputDStream--->new KafkaReceiver
    

    KafkaReceiver类继承了Receiver,当Reciver被调用起来时,执行onStart()方法,MessageHandler负责将收到的数据进行存储。执行流程如下:

    1. 创建createStreamReceiver被调起执行
    2. 连接ZooKeeper,读取相应的ConsumerTopic配置信息等
    3. 通过consumerConnector连接到Kafka集群,收取指定topic的数据
    4. 创建KafkaMessageHandler线程池来对数据进行处理,通过ReceiverInputDStream中的方法,将数据转换成BlockRDD,供后续计算

    2、 KafkaUtils.createDirectStream

    主要调用栈顺序:

    KafkaUtils.createDirectStream—> new DirectKafkaInputDStream

    执行流程如下:

    1. 实例化KafkaCluster,根据用户配置的Kafka参数,连接Kafka集群
    2. 通过Kafka API读取Topic中每个Partition最后一次读的Offset
    3. 接收成功的数据,直接转换成KafkaRDD,供后续计算

    架构

    通过两张图,来看下他们架构。

    1、 Receiver-based Approach

    2、 Direct Approach (No Receivers)

    优缺点

    相关的优缺点,在官网上已经说得很清楚了。追求效率、数据准确可以使用Direct方式,但需要自己对Offset进行处理。

    参考资料:

    Spark Streaming + Kafka Integration Guide

    https://github.com/koeninger/kafka-exactly-once

  • 相关阅读:
    CSS3中background-origin和background-clip的区别
    JavaScript的赋值是引用or复制,及参数传递
    写第一个jquery插件实录
    北大acm1008
    北大acm1007
    北大acm1006
    北大acm1005
    北大acm1004
    团队绩效评估
    第二阶段冲刺第十天
  • 原文地址:https://www.cnblogs.com/seaspring/p/5918859.html
Copyright © 2020-2023  润新知