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初始化时,是否会拉取集群元数据?相关推荐

  1. tp5 聚合max获取不到string最大值_深入理解Kafka客户端之如何获取集群元数据

    一.场景说明 当我们初始化一个Kafka生产者后(初始化流程可以查看<Kafka源码解析之生产者初始化流程>),通过该生产者将封装好的消息发送出去,示例代码仍然参考example模块下的P ...

  2. KafkaProducer初始化时涉及到哪些核心组件?

    执行以下代码: KafkaProducer<String,String> producer = new KafkaProducer<String,String>(props); ...

  3. oracle杀死进程时权限不足_当集群和数据库软件目录都被chown -R时,如何快速修复...

    甲:快快快上来看下数据库重启起不来了! 我:大哥,大白天的重启数据库! 甲:不是说导数据嘛,报权限不足,按网上的步骤改了权限,然后重启数据库 我:啥权限?!!命令是? 甲:chown -R oracl ...

  4. 有事务冲突时节点怎么加入MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 文章目录 1. 问题场景描述 2. 如何修复 2.1 找出事务差异点 2.2 决定如何处理 3. 小结 个别节点可能存在事 ...

  5. 蚂蚁大规模 Kubernetes 集群无损升级实践指南【探索篇】

    文|王连平(花名:烨川 ) 蚂蚁集团高级开发工程师 负责蚂蚁 Kubernetes 集群容器交付 专注于集群交付能力.交付性能及交付 Trace 等相关领域 本文 12623 字 阅读 20 分钟 - ...

  6. 容器技术---(二)kubernetes集群部署

    Kubernetes简介 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用:Kubernetes项目来源于Borg, ...

  7. k8s集群搭建教程(centos k8s搭建)

    系统:CentOS 7.8 内核:3.10.0 一.Master.Node节点都要安装Docker 1. 卸载原来的docker sudo yum remove docker \docker-clie ...

  8. 2019最新k8s集群搭建教程 (centos k8s 搭建)

    2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...

  9. 降本40%!Redis多租户集群的容器化实践

    本文转载自dbaplus社群 本文根据石鹏老师在[deeplus直播第260期]线上分享演讲内容整理而成.(文末有获取本期PPT&回放的方式,不要错过) 石鹏 VIPKID基础架构存储平台负责 ...

最新文章

  1. 【 Vivado 】基本的时序约束、分析的概念
  2. Shell-流程控制案例
  3. Scala可变数组ArrayBuffer:查询/修改/遍历/增加/删除
  4. python 常量_大疆机甲大师Python开发: 两只老虎
  5. Java常用的垃圾收集器_JVM垃圾收集算法及常用垃圾收集器
  6. hbase 中文乱码 查询_如何在 HBase Shell 命令行正常查看十六进制编码的中文?哈哈~...
  7. Mysql 数据库/表 备份 与 还原
  8. win8 oracle 卸载,大神细说win8系统卸载oracle的法子
  9. 从菜鸟到高手!Photoshop抠图全方位攻略
  10. java地图开发视频教程_java开发地图教程
  11. Python之利用marshmallow实现序列化与反序列化
  12. mysql的七种查询命令_MySQL数据库查询指令大全
  13. linux gcc配置安装文件失败,安装一些环境时提示安装不成功帮一下看看什么情况(apt-get install gcc g++ ssh...
  14. 谷木美身粥要怎样做?谷木美身粥功效真的那么神奇?
  15. Android调用C++实现共享内存(Native层)
  16. mongodb 建立索引提示异常:WiredTigerIndex::insert: key too large to index, failing 1483
  17. 将titles_test表名修改为titles_2017
  18. oracle重复数据取只一条,oracle 一个表多条重复记录只取一条的解决方法
  19. UVa12325 12325 - Zombie‘s Treasure Chest(思路+代码)
  20. 第二阶段--团队冲刺--第八天

热门文章

  1. python猜数游戏流程_python简单猜数游戏实例
  2. XXL-JOB v2.0.1 发布,分布式任务调度平台
  3. 孰轻孰重:可穿戴式设备的助益与风险
  4. linux下通过inotify-tools监控文件系统
  5. 18岁的他从月薪2000到月薪11000经历了什么?
  6. C语言中不同类型的循环(Different types of loops in C)
  7. String 类中怎么出现此类问题?
  8. mvc学习-编辑提交需要注意-mvc重点
  9. WPF 中动态创建和删除控件
  10. 浅谈script标签中的async和defer