转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

DirectStream、Stream的区别-SparkStreaming源码分析02的更多相关文章

  1. getJSONObject与optJSONObject的区别,结合源码分析

    *json解析常见问题: getJSONObject与optJSONObject的区别,下面结合源码和案例来分析当我们使用这两周方法来解析数据时,哪种比较好. 源码分析: //使用getJSONObj ...

  2. dubbo源码分析02:服务引用

    一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterProp ...

  3. Spring AMQP 源码分析 02 - CachingConnectionFactory

    ### 准备 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理   ## 前置知识   <Spring AMQP 源码分析 01 - Impatie ...

  4. JDK1.8源码分析02之阅读源码顺序

    序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...

  5. SparkStreaming 源码分析

    SparkStreaming 分析 (基于1.5版本源码) SparkStreaming 介绍 SparkStreaming是一个流式批处理框架,它的核心执行引擎是Spark,适合处理实时数据与历史数 ...

  6. [原创]java:Stream、Socket等源码分析

    一.对于java启动之后的线程的说明 java在启动后会有几个特殊线程: 1.main线程,主线程 2.JVM线程,虚拟机的线程 3.GC垃圾回收线程,是个守护线程 4.EDT&Toolkit ...

  7. jQuery源码分析-02正则表达式-RegExp-常用正则表达式

    2.4 常用正则表达式在网上找到一篇广为流传的文章<常用正则表达式>,逐一分析,不足地方进行补充和纠正. 常用的数字正则(严格匹配) 正则 含义 ^[1-9]\d*$ 匹配正整数 ^-[1 ...

  8. Libev源码分析02:Libev中的IO监视器

    一:代码流程 在Libev中,启动一个IO监视器,等待该监视器上的事件触发,然后调用该监视器的回调函数.整个的流程是这样的: 首先调用ev_default_loop初始化struct  ev_loop ...

  9. 非常适合新手的jq/zepto源码分析02

    function isPlainObject(obj) { return isObject(obj) && !isWindow(obj) && Object.getPr ...

随机推荐

  1. Ubuntu apt-get方式安装Subversion

    按照官方文档 http://subversion.apache.org/packages.html 使用apt-get安装方式: 1.安装Subversion: sudo apt-get instal ...

  2. CF MVC3此操作要求连接到 'master' 数据库。无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据。请提供未打开的连接 解决方法

    <add name="ProwebEntities" connectionString ="Data Source=.;Integrated Security=tr ...

  3. Oracle使用——PLSQL的中文乱码显示全是问号

    问题 这两天刚将PLSQL与Oracle配置好,但是在PLSQL中插入数据时.出现一个问题,PLSQL中的表里无法显示中文,中文无法保存.无法输出.中文在表中显示问号.如图: 原因 经过一番查证,发现 ...

  4. 【Oracle】将表名与字段名连接成一行数据展示,字段名使用顿号的分隔

    select '<'||a.comments||'>:'||replace(wmsys.wm_concat(b.comments),',','.')||'.' as pjzf from u ...

  5. 【Oracle】函数

    函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数. 语法 create [or replace] function func_name[(parameter1,[,parame ...

  6. xml DTD中的ELEMENT和ATTLIST

    是W3C的一个文档类型定义规则文件,是用来让浏览器根据你定义的DTD(文档类型定义)来解释页面代码的. doctype声明指出阅读程序应该用什么规则集来解释文档中的标记.在Web文档的情况下,“阅读程 ...

  7. apacheBench对网站进行压力测试

    apacheBench对网站进行压力测试 分类: 学习 2014-02-19 10:35 4154人阅读 评论(1) 收藏 举报 apacheBench压力测试 Apache Benchmark下载 ...

  8. Drupal的$messages是怎么显示的?

    Drupal的默认主题bartik会在页面顶部显示系统信息,例如警告.状态等.这个过程是如何实现的? 首先,在bartik目录下找到page.tpl.php,这是bartik主题的页面显示模板.其中有 ...

  9. Spring Framework Ecosystem – Introduction to Spring Projects

    来自于:http://springtutorials.com/spring-ecosystem/ Hello and Welcome to Spring Tutorials Blog! Is it f ...

  10. nyoj-----前缀式计算

    前缀式计算 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀 ...