(一)、消费者连接器如何创建数据流=====》消费者初始化

以0.10.2.1版本为主分析kafka源码。如有分析不当之处,还望留言指出,相互学习,谢谢!。

1、目前kafak的消费者连接器只有一种基于zookeeper的

    老版本中的消费者只有两个方法:根据配置文件创建消费者连接器

  创建基于java的连接器,其实还是zookeeper的

消费者连接器内部通过调用consume方法创建数据流。核心主要放在consume方法内部。

consume方法实现如下:

内部定义了多种数据结构:

    topicThreadIds:指的是每个主题对于了所有线程id     topic-->threadIds.

   queuesAndStreams:每个线程对应了产生一个元祖,元祖内容为(队列,kafka数据流)。

        topicCount主要根据用户传进去的主题和线程个数构建一个主题和线程ID(一个线程个数就是一个线程ID)

该方法内部主要有三个实现;

    1、注册消费者:

        registerConsumerInZk。(在消费者组临时目录下创建一个消费者路径)。

allQueuesAndStreams根据类型进行模式匹配,有多个主题对于的队列数据流就展开返回所有的队列数据流,如果只是一个主题,则直接返回就可以了。

allQueueAndStreams:===》(queue,stream)

zip操作之后数据结构。

  threadQueueStreamPairs===>  ((topic,threadId),(queue,stream))。

下面这部分代码主要是构建一个线程Id---》queue之间的映射。初始化内部的数据结构topicThreadIdAndqueues--》((topic,threadId),queue)

下面这部分代码主要是首先根据topic排序。数据结构还是他threadQueueStreamPairs===>  ((topic,threadId),(queue,stream))。

这部分代码主要用于初始化topicStreamsMap构建  topic---->streams的数据结构。

让监听器监听制定目录下的数据变化,让创建的监听器起作用

最后一部,数据结构初始化之后就开始再平衡操作。

小结:

        重新初始化其实做

           1、 创建监听器并让其起作用

           2、初始化数据结构

           3、再平衡操作

前面1,2两个已经分析,看再平衡怎么做的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值