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

posted @ 2016-07-10 13:26  哎哟慰  阅读(689)  评论(0编辑  收藏  举报