kafka 获取metadata

问题:

<Failed to update metadata after 3000 ms.>

 

sender类的发送数据时候,会

List<ClientResponse> responses = this.client.poll(requests, pollTimeout, now);//nio 发送数据

 

NetworkClient类,方法poll,检查metadata是否需要更新

方法:

    /**
     * Add a metadata request to the list of sends if we can make one
     */
    private void maybeUpdateMetadata(List<NetworkSend> sends, long now) {
        // Beware that the behavior of this method and the computation of timeouts for poll() are
        // highly dependent on the behavior of leastLoadedNode.
        // 最新的可用node
        Node node = this.leastLoadedNode(now);
        if (node == null) {
            log.debug("Give up sending metadata request since no node is available");
            // mark the timestamp for no node available to connect
            this.lastNoNodeAvailableMs = now;
            return;
        }

        log.debug("Trying to send metadata request to node {}", node.id());
        if (connectionStates.isConnected(node.id()) && inFlightRequests.canSendMore(node.id())) {
            Set<String> topics = metadata.topics();
            this.metadataFetchInProgress = true;
            //生成metadata请求,加入到sends队列中
            ClientRequest metadataRequest = metadataRequest(now, node.id(), topics);
            log.debug("Sending metadata request {} to node {}", metadataRequest, node.id());
            sends.add(metadataRequest.request());
            this.inFlightRequests.add(metadataRequest);
        } else if (connectionStates.canConnect(node.id(), now)) {
            // we don't have a connection to this node right now, make one
            log.debug("Init connection to node {} for sending metadata request in the next iteration", node.id());
            initiateConnect(node, now);
            // If initiateConnect failed immediately, this node will be put into blackout and we
            // should allow immediately retrying in case there is another candidate node. If it
            // is still connecting, the worst case is that we end up setting a longer timeout
            // on the next round and then wait for the response.
        } else { // connected, but can't send more OR connecting
            // In either case, we just need to wait for a network tevent to let us know the seleced
            // connection might be usable again.
            this.lastNoNodeAvailableMs = now;
        }
    }

 

    

选择一个请求最少,并且链接状态可用的host,作为获取metadata的host

这里

 

/**
     * Choose the node with the fewest outstanding requests which is at least eligible for connection. This method will
     * prefer a node with an existing connection, but will potentially choose a node for which we don't yet have a
     * connection if all existing connections are in use. This method will never choose a node for which there is no
     * existing connection and from which we have disconnected within the reconnect backoff period.
     * @return The node with the fewest in-flight requests.
     */
    public Node leastLoadedNode(long now) {
        List<Node> nodes = this.metadata.fetch().nodes();
        int inflight = Integer.MAX_VALUE;
        Node found = null;
        for (int i = 0; i < nodes.size(); i++) {
            int idx = Utils.abs((this.nodeIndexOffset + i) % nodes.size());
            Node node = nodes.get(idx);
            int currInflight = this.inFlightRequests.inFlightRequestCount(node.id());
            if (currInflight == 0 && this.connectionStates.isConnected(node.id())) {
                // if we find an established connection with no in-flight requests we can stop right away
                return node;
            } else if (!this.connectionStates.isBlackedOut(node.id(), now) && currInflight < inflight) {
                // otherwise if this is the best we have found so far, record that
                inflight = currInflight;
                found = node;
            }
        }

        return found;
    }

 

 

 

 

Kafka源码之Sender分析 我们先来介绍一下Sender发送消息的整个流程:首先根据RecordAccumulator的缓存情况,利用ready筛选出可以向哪些节点发送消息,然后根据生产者和各个节点的连接爱你概况,过滤Node节点,之后,生成相应的请求,这里要特别注意的是每个Node节点只生成一个请求,最后,调用NetWorkClient将请求发送出去。 1、从Metadata获取Kafka集群元数据 2、调用Record... 阅读详情

相关推荐

【kafka】kafka Producer Metadata概述及源码分析

转载:Kafka源码阅读(二):Producer Metadata概述及源码分析什么是metadata?metadata指Kafka集群的元数据,包含了Kafka集群的各种信息,例如如:metadata应用场景metadata在Kafka中无疑是非常重要的,很多场景中都需要从metadata中获取数据或更新数据,例如:指Kafka集群中所有node中,它是由每个node再InFlightRequests中还未确定的请求数决定的,未确定的请求越少则负载越小。如上图所示,node1即为LeastLoadedNo

九师兄 1284

kafka学习笔记(四):源码角度理解metadata

Kafka更新metadata的总体流程 Kafka集群元数据 Kafka每个Topic中有多个分区,这些分区的Leader副本可以分配在集群中不同的Broker上。我们站在生产者的角度来看,分区的数量以及Leader副本的分布是动态变化的。通过简单的示例说明这种动态变化:在运行过程中,Leader副本随时都有可能出现故障进而导致Leader副本的重新选举,新的Leader副本会在其他Broker上继续对外提供服务。当需要提高某Topic的并行处理消息的能力时,我们可以通过增加其分区的数量来实现。当然,还

BlueLotuss的博客 1447

【kafka】查看消费组报错 Executing consumer group command failed due to Request METADATA failed on brokers Lis

kafka查看消费组报错 cc@lcc bin$ /Users/lcc/soft/kafka/kafka_2.11-1.1.0/bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:2181,localhost:2182,localhost:2183 --list The [new-consumer] ...

九师兄 8738

Kafka Metadata

Librdkafka对Kafka Metadata的封装和操作 我们在之前的Kafka源码分析系列中介绍过kafka集群的metadata, 大家可以参考一下; 简单说, kafka集群的metadata包括: 所有broker的信息: ip和port; 所有topic的信息: topic name, partition数量, 每个partition的leader, isr, repli...

lusic01的专栏 3683

IMU卡尔曼滤波方法详细介绍

本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。

haing2019的博客 754

从时序博弈到数据稳定:CS1237驱动中的信号滤波与卡尔曼实践

本文探讨了CS1237高精度ADC驱动在复杂工业环境中的信号处理挑战,重点介绍了一阶滤波与自适应卡尔曼滤波算法的实践应用。通过参数优化和动态调整策略,有效提升了数据稳定性和抗干扰能力,为嵌入式系统在噪声环境下的精密测量提供了可靠解决方案。

rnn9storyteller的博客 862

四、Kafka的元数据-MetaData

1、元数据(MetaData): 服务器活动状态 Topic和Topic的分区 Partition都有哪些Replication 哪个Replication是Leader ps: 一般情况下,客户端会把元数据缓存起来,并直接往目标Broker上发送生产请求和获取请求。 客户端需要定时发送元数据请求来刷新这些信息。 2、元数据请求时序图: ...

qq_31473465的博客 2751

LSTM模型 轨迹经纬度预测

原始时间序列数据如下所示,我们只取前两列纬度和经度作为输入数据 我们设定用前六个位置信息预测下一个位置,则两个样本的输入输出数据如下所示: 创建LSTM网络训练模型: import numpy as np from keras.layers.core import Dense, Activation, Dropout from keras.layers import LS...

Muzi_Water的博客 2万+

Kafka源码分析(三)——Producer:Metadata集群元数据

本章,我对Producer的Topic元数据拉取机制进行了讲解,Topic的元数据都是按需拉取的,这是一种延迟加载的思想。Sender线程成功的在时间内(默认60秒),把Topic元数据加载到了,然后缓存到了Metadata里去,更新了version版本号,此时会尝试把阻塞等待的主线程唤醒;主线程等待超过60秒,Sender线程还没有完成元数据加载,则抛出超时异常。另外,Sender线程在实际拉取元数据时,会挑选一个负载最小的Broker节点,然后向这个 节点发送请求来获取具体的元数据信息。

smart_an的专栏 1050

MicroLogix1400编程(使用RSLogix 500 + RSLinx Classic Lite)

MicroLogix1400编程

noscallion的博客 1万+

(5)ModalAI VOXL2

Ardupilot官网关于《Non-GPS navigation》的翻译 —《(5) ModalAI VOXL2》。

无人机开发(开源Ardupilot) 1万+

kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息

如果我们需要通过编程的方式来获取到TopicMetadataRequest请求到 def findLeader(topic: String): Unit = {val consumer = connect("www.iteblog.com", 9092)val req = TopicMetadataRequest(TopicMetadataRequest.CurrentVersion,0, kaf...

weixin_35308269的博客 2340

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1218

通过编程方式获取Kafka中Topic的Metadata信息

http://www.iteblog.com/archives/1604

u011007180的博客 2675

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2880

36、真核生物RNA PolII启动子预测相关研究

本文综述了真核生物RNA聚合酶II启动子预测的研究进展,涵盖转录调控机制、核心启动子元件(如TATA框、INR、GC框)、转录因子结合位点预测的挑战与方法。介绍了基于权重矩阵、神经网络和隐马尔可夫模型等多种启动子预测算法,并探讨了启动子分类策略及评分加权方法。通过Hertz-Stormo-Hartzell流程和基因微阵列分析实例,展示了如何识别保守调控序列。文章还总结了当前预测技术的局限性,提出了整合多组学数据、开发深度学习模型、加强实验验证等未来研究方向,旨在提升启动子识别的准确性与生物学意义。

palm99的专栏 187

读kafka源码的笔记 (2) - Producer第一次获取Broker的metadata

weixin_40315239的博客 253

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Kafka中的Metadata

强烈推荐去看,写的太详细了。这里只做个人学习笔记。

m0_47160811的博客 1245

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

吃透Kafka五:Producer Metadata 更新机制

在上一篇文章中,已经介绍了 Producer 的发送模型,Producer dosend() 方法中的第一步,就是获取相关的 topic 的 metadata,但在上篇中并没有深入展开,因为这部分的内容比较多,所以本文单独一篇文章进行介绍,本文主要来讲述以下三个问题: metadata 内容是什么。 Producer 更新 metadata 的流程。 Producer 在什么情况下会去更新 metadata。 Metadata 内容 Metadata 信息的内容可以通过源码看明白: // 这个类被 cl

吃透Java 3834

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Kafka Producer 与 Metadata

参考: https://www.jianshu.com/p/46cb44c6b96c https://blog.youkuaiyun.com/chunlongyu/article/details/52622422 https://bigzuo.github.io/2017/03/13/Kafka-producer-%E5%8F%91%E9%80%81%E6%95%88%E7%8E%87%E4%BD%8E...

justsomebody126的专栏 870

Kafka生产者介绍(二):Metadata

集群元数据是生产者的一个重要字段,这些信息记录了某个topic有哪几个分区,每个分区的Leader副本在哪个节点上,Follower副本在哪些节点上,ISR集合,以及这些节点的ip地址、端口。 public final class Metadata { // metadata 更新失败时,为避免频繁更新 meta,最小的间隔时间,默认 100ms private fina...

lianggx3的博客 1638

Kafka 客户端是如何找到 leader 分区的

《数据驱动:从方法到实践》送书活动今天下午18:00截止了,详情请点击 【福利】文末评论免费送《数据驱动:从方法到实践》如下面图片不清晰,请访问https://www.i...

Hadoop技术博文 3461

如何查看kafka每个话题一共分了几个分区_Kafka 客户端是如何找到 leader 分区的...

在正常情况下,Kafka中的每个Topic都会有很多个分区,每个分区又会存在多个副本。在这些副本中,存在一个leader分区,而剩下的分区叫做 follower,所有对分区的读写操作都是对leader分区进行的。所以当我们向Kafka写消息或者从Kafka读取消息的时候,必须先找到对应分区的Leader及其所在的Broker地址,这样才可以进行后续的操作。本文将要介绍的就是 Kafka 是如何找到...

weixin_39906245的博客 941

Kafka客户端是如何找到 leader 分区的

在正常情况下,Kafka中的每个Topic都会有很多个分区,每个分区又会存在多个副本。在这些副本中,存在一个leader分区,而剩下的分区叫做 follower,所有对分区的读写操作都是对leader分区进行的。所以当我们向Kafka写消息或者从Kafka读取消息的时候,必须先找到对应分区的Leader及其所在的Broker地址,这样才可以进行后续的操作。本文将要介绍的就是 Kafka 是如何找到 leader 分区的。 我们知道, Kafka 是使用 Scala 语言编写的,但是其支持很多语言的客户端,

liao0801_123的博客 2018

kafka producer 学习笔记2-集群元数据metadata更新

一 序 上一篇在介绍producer的核心方法dosend ,send除了拦截器外,第一步就是要获取集群信息, clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), maxBlockTimeMs); 因为dosend本身流程较长,所以本篇主要围绕kafka的集群元数据...

bohu83的博客 1万+
上一篇: kafka leader balance
下一篇: java内存使用查看 转
blackproof
博客等级 码龄17年 12粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值