该包下只有一个文件:ClientUtils.scala。它是一个object,里面封装了各种client(包括producer,consumer或admin)可能会用到的方法:

1. fetchTopicMetadata(producer版本): producer client会调用该方法来发送一个TopicMetadata请求,最后返回该请求对应的response。具体逻辑如下:
  • 构造一个TopicMetadataRequest请求
  • 将给定的broker列表按照随机顺序打散以防止大量的请求被路由到同一个broker上
  • 遍历打乱顺序后的broker列表,尝试着为每一个broker构造一个sync producer连向它并发送请求,如果成功就退出遍历,否则就记录一个警告信息然后尝试下一个broker
  • 但如果遍历完之后request都没有被成功发送,抛出异常退出,否则返回得到的response

2. fetchTopicMetadata(非producer版本):非producer客户端程序会调用该方法来发送一个元数据请求,真正的逻辑也是通过调用上一个版本的fetchTopicMetadata实现。

3. parseBrokerList:解析一组broker url,url格式为host1:port1, host2:port2,...返回一组Broker对象
4. channelToAnyBroker:创建一个阻塞通道连向任意一个broker,返回该阻塞通道
5. channelToOffsetManager:创建一个阻塞通道连向给定consumer group的offset管理器。具体逻辑就是不断地尝试向不同的broker发送ConsumerMetadataRequest获取对应的broker也就是coordinator信息;一旦获取之后比较一下是否是已创建的阻塞通道所连向的broker,如果是直接返回;否则创建一个新的阻塞队列连向这个coordinator并断开已创建的,然后返回这个coordinator

转载于:https://www.cnblogs.com/huxi2b/p/4563469.html

【原创】kafka client源代码分析相关推荐

  1. 【原创】k8s源代码分析-----kubelet(8)pod管理

    本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460540474 本文csdn博客链接:http://blog.csdn.net/screscent ...

  2. 你绝对能看懂的Kafka源代码分析-KafkaConsumer类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  3. Spring Security——OAuth 2.0 Client自动配置源代码分析

    基本概念 OAuth2.0:OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0). OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源 ...

  4. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析(2)...

    注意,这里的参数reply = 0,表示这是一个BC_TRANSACTION命令.         前面我们提到,传给驱动程序的handle值为0,即这里的tr->target.handle = ...

  5. 你绝对能看懂的Kafka源代码分析-Kafka Producer设计分析

    之前我写了<Kafka入门教程轻松学>系列文章,半年来有1万多的阅读量,虽然不算很多,但看到很多朋友的支持,也给了我继续写下去的动力.接下来我会再写一个系列文章----<你绝对能看懂 ...

  6. Spark SQL之External DataSource外部数据源(二)源代码分析

    上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External Da ...

  7. Windbg调优Kafka.Client内存泄露

    从来没写过Blog,想想也是,工作十多年了,搞过N多的架构.技术,不与大家分享实在是可惜了.另外,从传统地ERP行业转到互联网,也遇到了很所前所未有的问题,原来知道有一些坑,但是不知道坑太多太深.借着 ...

  8. Android应用程序进程启动过程的源代码分析(1)

    Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实 ...

  9. 聊聊kafka client chunkQueue 与 MaxLag值

    为什么80%的码农都做不了架构师?>>>    序 前面一篇文章讨论了ConsumerFetcherManager的MaxLag与ConsumerOffsetChecker的lag值 ...

最新文章

  1. 人工神经网络是如何实现存算一体的
  2. 社团发现算法-BGLL算法(附代码实现)
  3. mysql 和 sqlite 区别 及 SQLite Expert Professional sqliteManager 区别
  4. python安装教程windows-Python for windows 安装教程
  5. 五年级计算机学情分析,2015—2016学年小学五年级信息技术上册教学计划
  6. hdu 1692(枚举+剪枝)
  7. 重庆理工大学两江校区计算机学院,重庆理工大学两江校区国际项目9月开学
  8. 专攻国内实体瘤CAR-T细胞疗法,南京卡提医学获数千万元A轮融资...
  9. 小米随身WIFI去掉云U盘的方法
  10. 【语音处理】开始学习语音,从基本概念和应用讲起
  11. div半透明背景,文字不透明
  12. 【Struts】:Struts1和Struts2的区别与联系
  13. 苏黎世大学SVO2安装教程
  14. 计算机联锁光带解锁,计算机联锁中三点检查解锁逻辑初探
  15. 服务器过载保护(下篇)——过载处理新方案
  16. 用html制作四行四列的表格,HTML表格元素
  17. 阿里天池心跳信号分类预测baseline
  18. Unity3D 对于在VR中普通摄像头和VR摄像头同时存在——分屏
  19. 2021清华本科特奖答辩现场:有人用AI识别甲骨文!有人研究6G!奥运冠军:走下领奖台一切归零...
  20. FIL筑底完成,现在布局FIL不容忽视

热门文章

  1. linux中fork和exec
  2. sess.run接收返回值得变量和sess.run函数內的tensor型变量命名注意不能一致,影响迭代,产生报错:Can not convert a ndarray into a Tensor
  3. win7系统硬盘安装centos7(easyBCD)
  4. 概率论-4.4 特征函数(待补充)
  5. android studio for循环快捷键,Android Studio 快捷键 for Mac OS X
  6. Andorid App内部跟随熊语言改变
  7. 15.10.4 捕获异常
  8. log4j xml配置详解
  9. 查看dll文件被哪些软件调用的命令
  10. Java开源项目EZMorph简介