zoukankan      html  css  js  c++  java
  • Kakfa揭秘 Day9 KafkaReceiver源码解析

    Kakfa揭秘 Day9

    KafkaReceiver源码解析

    上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver。

    初始化

    Direct和普通Receiver方式,最大的区别,是元数据的管理方式。
    Direct方式是没有通过zookeeper,由应用自身来管理。
    Snip20160710_41

    而对比Receiver方式,我们可以看到需要传入zookeeper的地址。
    Snip20160710_43

    在Receiver的工厂方法,有一些比较重要的参数:

    1. zkQuorum,就是zookeeper的地址,一般是奇数个。数据是存储在broker中的,所以只是从zookeeper去查询我们需要的数据在哪里,由zookeeper来管理offset等元数据的信息。
    2. groupId,sparkStreaming在消费kafka的数据时,是分group的,当进行不同业务类型消费时,会很需要。
    3. topics,表明消费的内容,每个partition有个单独的线程来抓取数据。
    4. storageLevel,存储级别,模式是MEMORY_AND_DISK_SER_2,内存放的下放在内存,否则放磁盘,所以不用担心内存不够的问题。

    KafkaReceiver

    根据前面的课程,我们知道InputDStream最终都会创建一个Receiver对象来工作,在这个功能中,就是KakfaReceiver。

    在onStart方法中,最为关键的就是创建consumerConnector。
    Snip20160710_45

    内部会生成一个zookeeperConsumerConnector,这是一个门面模式,封装了与zookeeper沟通的细节。在其中,最关键的是调用了下面三个方法。
    也就是,创建zk连接,创建fetcher,并且将zk中的元数据与fetcher进行连接。
    Snip20160710_47

    然后,是根据consumer连接来获取stream,consumer获取数据过程前面已经完整介绍过,这里就不重复说明。
    Snip20160710_52

    最后,会跟据监听的不同的topic,开启线程,每一个线程中都放一个MessageHandler。
    Snip20160710_48

    MessageHandler里面的功能就是取出数据,然后store给spark。

    Snip20160710_50

    至此,完成了数据获取的过程。

    欲知后事如何,且听下回分解!

    DT大数据每天晚上20:00YY频道现场授课频道68917580

  • 相关阅读:
    bower一个强大的前端依赖包管理工具
    Nodejs中的this
    探讨Nodejs中的作用域问题。
    初了解NodeJS
    小心情。
    关于数组方面的算法分析
    JS算法总结
    JS Event事件
    封装Js事件代理方法
    SqlServer 操作 JSON
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5657548.html
Copyright © 2011-2022 走看看