KafkaProducer初始化时,是否会拉取集群元数据?
debug看一下:
//核心行为:初始化时,直接调用Metadata组件的方法,从Broker上拉取1次集群元数据,每隔5min刷新一次
//在发送消息过程中,如果没找到某个Broker的元数据,也得去拉取一次
this.metadata.update(Cluster.bootstrap(addresses), time.milliseconds());
会将addresses传进去,并返回包装好的Cluster:
//addresses就是我们配置的Broker:[localhost/127.0.0.1:9092]public static Cluster bootstrap(List<InetSocketAddress> addresses) {List<Node> nodes = new ArrayList<>();int nodeId = -1;for (InetSocketAddress address : addresses)//将addresses转换为nodesnodes.add(new Node(nodeId--, address.getHostString(), address.getPort()));//根据nodes创建Cluster,并返回return new Cluster(true, nodes, new ArrayList<PartitionInfo>(0), Collections.<String>emptySet());}
接着会调用update方法:
public synchronized void update(Cluster cluster, long now) {//是否需要update的标志位置为falsethis.needUpdate = false;//最近一次刷新时间:nowthis.lastRefreshMs = now;//最近一次成功刷新时间:nowthis.lastSuccessfulRefreshMs = now;//集群元数据版本号:每次成功更新后,都要给version+1this.version += 1;//集群元数据更新的监听器for (Listener listener: listeners)listener.onMetadataUpdate(cluster);// Do this after notifying listeners as subscribed topics' list can be changed by listeners//needMetadataForAllTopics默认false:是否强制将集群所有Topic元数据都抓取过来//这里的逻辑就是:将我们创建的cluster,赋值给了cluster。也就是我们配置的那个Brokerthis.cluster = this.needMetadataForAllTopics ? getClusterForCurrentTopics(cluster) : cluster;//wait()会释放锁,进入休眠中状态,等待再次被唤醒。//如果有人获取锁之后,调用notifyAll(),就会把之前调用wait()方法进入休眠的线程给唤醒,让他尝试再次获取锁notifyAll();log.debug("Updated cluster metadata version {} to {}", this.version, this.cluster);}
这里说明,在KafkaProducer初始化时,并没有真正的从哪一个Broker上拉取元数据。仅仅是对集群元数据做了1个初始化操作,把我们配置的Broker地址转换为Node,放在Cluster实例中
KafkaProducer初始化时,是否会拉取集群元数据?相关推荐
- tp5 聚合max获取不到string最大值_深入理解Kafka客户端之如何获取集群元数据
一.场景说明 当我们初始化一个Kafka生产者后(初始化流程可以查看<Kafka源码解析之生产者初始化流程>),通过该生产者将封装好的消息发送出去,示例代码仍然参考example模块下的P ...
- KafkaProducer初始化时涉及到哪些核心组件?
执行以下代码: KafkaProducer<String,String> producer = new KafkaProducer<String,String>(props); ...
- oracle杀死进程时权限不足_当集群和数据库软件目录都被chown -R时,如何快速修复...
甲:快快快上来看下数据库重启起不来了! 我:大哥,大白天的重启数据库! 甲:不是说导数据嘛,报权限不足,按网上的步骤改了权限,然后重启数据库 我:啥权限?!!命令是? 甲:chown -R oracl ...
- 有事务冲突时节点怎么加入MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 文章目录 1. 问题场景描述 2. 如何修复 2.1 找出事务差异点 2.2 决定如何处理 3. 小结 个别节点可能存在事 ...
- 蚂蚁大规模 Kubernetes 集群无损升级实践指南【探索篇】
文|王连平(花名:烨川 ) 蚂蚁集团高级开发工程师 负责蚂蚁 Kubernetes 集群容器交付 专注于集群交付能力.交付性能及交付 Trace 等相关领域 本文 12623 字 阅读 20 分钟 - ...
- 容器技术---(二)kubernetes集群部署
Kubernetes简介 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用:Kubernetes项目来源于Borg, ...
- k8s集群搭建教程(centos k8s搭建)
系统:CentOS 7.8 内核:3.10.0 一.Master.Node节点都要安装Docker 1. 卸载原来的docker sudo yum remove docker \docker-clie ...
- 2019最新k8s集群搭建教程 (centos k8s 搭建)
2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...
- 降本40%!Redis多租户集群的容器化实践
本文转载自dbaplus社群 本文根据石鹏老师在[deeplus直播第260期]线上分享演讲内容整理而成.(文末有获取本期PPT&回放的方式,不要错过) 石鹏 VIPKID基础架构存储平台负责 ...
最新文章
- 【 Vivado 】基本的时序约束、分析的概念
- Shell-流程控制案例
- Scala可变数组ArrayBuffer:查询/修改/遍历/增加/删除
- python 常量_大疆机甲大师Python开发: 两只老虎
- Java常用的垃圾收集器_JVM垃圾收集算法及常用垃圾收集器
- hbase 中文乱码 查询_如何在 HBase Shell 命令行正常查看十六进制编码的中文?哈哈~...
- Mysql 数据库/表 备份 与 还原
- win8 oracle 卸载,大神细说win8系统卸载oracle的法子
- 从菜鸟到高手!Photoshop抠图全方位攻略
- java地图开发视频教程_java开发地图教程
- Python之利用marshmallow实现序列化与反序列化
- mysql的七种查询命令_MySQL数据库查询指令大全
- linux gcc配置安装文件失败,安装一些环境时提示安装不成功帮一下看看什么情况(apt-get install gcc g++ ssh...
- 谷木美身粥要怎样做?谷木美身粥功效真的那么神奇?
- Android调用C++实现共享内存(Native层)
- mongodb 建立索引提示异常:WiredTigerIndex::insert: key too large to index, failing 1483
- 将titles_test表名修改为titles_2017
- oracle重复数据取只一条,oracle 一个表多条重复记录只取一条的解决方法
- UVa12325 12325 - Zombie‘s Treasure Chest(思路+代码)
- 第二阶段--团队冲刺--第八天