博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】kafka client源代码分析
阅读量:5861 次
发布时间:2019-06-19

本文共 867 字,大约阅读时间需要 2 分钟。

该包下只有一个文件: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

转载地址:http://hzrjx.baihongyu.com/

你可能感兴趣的文章
我的Linux生涯之用户的切换和sudo
查看>>
Android & Vibrator
查看>>
2016-04-16 拿到一个offer
查看>>
linux使用nfs、portmap服务共享远程磁盘的方法
查看>>
sklearn 快速入门 - 0.18 中文翻译
查看>>
tomcat显示中文页面
查看>>
linux下lnmp网站搭建
查看>>
wget整站下载
查看>>
《转》ceilometer的数据采集机制入门
查看>>
VS使用技巧——工欲善其事必先利其器
查看>>
conn /as sysdba 详解
查看>>
试卷: 阿里巴巴2016前端开发工程师笔试(一)
查看>>
交换机端口安全总结
查看>>
PHP 无极限分类 之非递归实现
查看>>
HAproxy指南之haproxy实现动静分离(案例篇)
查看>>
修正后的SYSTEM_THREADS与SYSTEM_PROCESSES结构体
查看>>
图解OSPF从入门到配置
查看>>
Android窗口机制(三)Window和WindowManager的创建与Activity
查看>>
2016上海
查看>>
让IDEA生成链式编程风格的类
查看>>