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

Similar documents
Apache CarbonData集群模式使用指南

Spark读取Hbase中的数据

Flume-ng与Mysql整合开发

Hadoop&Spark解决二次排序问题(Hadoop篇)

通过Hive将数据写入到ElasticSearch

使用Cassandra和Spark 2.0实现Rest API服务

Guava学习之Resources

在Spring中使用Kafka:Producer篇

Hive:用Java代码通过JDBC连接Hiveserver

使用Hive读取ElasticSearch中的数据

如何在 Apache Hive 中解析 Json 数组

使用MapReduce读取XML文件

SparkR(R on Spark)编程指南

六种使用Linux命令发送带附件的邮件

使用Spark SQL读取Hive上的数据

自定义Spark Streaming接收器(Receivers)

使用Apache Beam读写HDFS上的文件

韶关:神奇丹霞

哼, 你 們 不 回 答 又 怎 麼 樣? 不 管 是 多 大 來 頭, 現 在 都 被 血 魔 吞 噬 無 蹤 了 你 們 幾 個 真 是 太 過 分, 我 不 犯 你 們, 你 們 卻 一 天 到 晚 來 挑 釁 我 教 尊 冷 笑 著 說 道 嗚, 大 人 土 地 大 姐 跪 下 來, 流 下

伊春:醉人林都

Guava学习之CharSequenceReader

Flink快速上手(QuickStart)

Hadoop元数据合并异常及解决方法

将 MySQL 的全量数据导入到 Apache Solr 中

三种方法实现Hadoop(MapReduce)全局排序(1)

关林:武圣陵寝

泰山:五岳独尊

解决百度统计无法获取https来源的referrer

案例分享产品文档

Spark作业代码(源码)IDE远程调试

Spark 2.0介绍:在Spark SQL中定义查询优化规则

Chapter #

国内26省市新能源汽车推广规划已出台

北戴河:海阔天空

Apache Spark 2.4 新增内置函数和高阶函数使用介绍


西岭雪山滑雪场

Ubuntu和CentOS如何配置SSH使得无密码登陆

Flink快速上手之Scala API使用

060522達文西密碼_全_.PDF

21 个你应该知道的 wget 命令

恩 典 课 堂 教 学 概 览 课 堂 环 节 持 续 时 间 活 动 所 需 材 料 1 欢 迎 持 续 在 门 口 欢 迎 学 生, 聆 听 他 们 分 享 本 周 开 心 或 烦 恼 的 事 预 备 活 动 <10 分 钟 A 猜 猜 是 谁 B 上 帝 的 礼 物 无 孩 子 们 的 儿 时

团 契 就 体 力 来 说, 参 孙 乃 是 地 上 极 强 壮 的 人 ; 但 在 自 制 忠 贞 和 坚 稳 上, 他 却 是 人 间 最 软 弱 的 了 先 祖 与 先 知 第 页 教 室 布 置 见 第 一 课 课 堂 教 学 概 览 课 堂 环 节 持 续 时 间 活 动

Flink on YARN部署快速入门指南

江门:中国第一侨乡

是 喔, 就 是 那 個 在 BBS 醫 療 版 跟 你 嗆 聲, 自 稱 有 三 十 多 年 推 拿 經 驗 的 大 叔 嗎? 一 個 看 來 頗 為 清 秀 的 女 生 問 道, 她 語 氣 中 略 感 訝 異 是 啊, 什 麼 推 拿 按 摩 有 多 好, 還 要 人 生 病 盡 量 不 要

教育扩张能改善收入分配差距吗?——来自CHNS2006年数据的证据

山水文化,市井人家——以湖州邱城小镇的概念性规划为例

在Fedora上部署Hadoop2.2.0伪分布式平台

Spark1.4中DataFrame功能加强,新增科学和数学函数

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

C doc

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

三种恢复 HDFS 上删除文件的方法

Microsoft Word 養生與保健_中山大學_講義


萬里社區老人健康照護手冊

Microsoft Word - 強制汽車責任保險承保及理賠作業處理辦法 doc

Microsoft Word - 06.Understanding of Pregnancy and Birth.doc

(➂)11. 炎 炎 夏 日, 即 使 下 起 滂 沱 大 雨, 都 消 除 不 了 令 人 心 煩 的 暑 氣 這 句 話 主 要 想 表 達 什 麼? ➀ 夏 日 裡 經 常 下 著 滂 沱 大 雨, 令 人 心 煩 ➁ 下 著 滂 沱 大 雨 的 日 子, 可 以 消 除 暑 氣 ➂ 夏 日

範本檔

附 件 一 : 办 理 集 中 式 银 期 转 账 业 务 网 点 名 单 序 号 地 区 网 点 名 称 地 址 联 系 人 电 话 23 工 商 银 行 安 徽 省 铜 陵 百 大 支 行 铜 陵 市 长 江 东 路 50 号 鲁 桂 珍 工 商 银 行 安 徽

2. 二 年 級 吳 毓 秀 老 師 : 感 謝 午 餐 公 司 平 時 均 能 準 時 送 餐, 但 希 望 能 不 要 使 用 加 工 品, 且 學 生 反 映 希 望 能 多 加 蛋 品 的 食 物 3. 三 年 級 柯 阿 青 老 師 : 雞 肉 有 血 水 味, 請 午 餐 公 司 能 調

高雄市立五福國民中學九十四學年度第一學期第三次段考二年級本國語文學習領域試題卷

人 物 春 秋 杨 永 泰 将 其 削 藩 策 略 概 括 为 : 以 经 济 方 法 瓦 解 冯 玉 祥 的 第 二 集 团 军, 以 政 治 方 法 解 决 阎 锡 山 的 第 3 集 团 军, 以 军 事 方 法 解 决 李 宗 仁 的 第 四 集 团 军, 以 外 交 方 法 对 付 张 学

台北老爺校外實地參訪結案報告


糖尿病食譜



,,,,,,, (,, ),,,,,,,,,,,,,,, ,,, 4 11,, ( ),,,, ( ), :, ( ),,, 1995, 66 ; ( ),, 1996, , 3-4,,


2002 4,,, 1941,,,,,,,,,,,,,,,,,, : ;:, 1991,

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

Hive几种数据导入方式

恩 典 课 堂 教 学 概 览 课 堂 环 节 持 续 时 间 活 动 所 需 材 料 欢 迎 在 门 口 欢 迎 孩 子, 聆 听 他 们 分 享 本 周 开 心 或 烦 恼 的 事 无 预 备 活 动 <10 分 钟 A 十 诫 石 板 B 我 是 谁? 粘 土 牙 签 一 些 名 人 的 照

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

TWLOM060929

Hadoop 2.2.0安装和配置lzo

据传-蚂蚁金服350亿美元开约A股IPO,马云身价又要暴涨

张家口:塞外明珠

使用Apache Spark将数据写入ElasticSearch

PDF 入不思議解脫境界普賢行願品 ... 《大方廣佛華嚴經卷第四十》

<4D F736F F D F6F70B4F3CAFDBEDDBCB0BAA3C1BFCAFDBEDDCDDABEF2D3A6D3C3B9A4B3CCCAA6C5E0D1B5B0E056312E332E646F63>

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

八个基本的 Docker 容器管理命令

鼓浪屿:懒得艳遇

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

epub83-1

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

三种方法实现Hadoop(MapReduce)全局排序(2)

昆明:茶暖花瘦

树的非递归中序和层次遍历实现

搭 建 企 业 文 化 交 流 平 台 展 示 企 业 文 化 建 设 成 果 东 疆 港 区 邮 轮 母 港 客 运 大 厦 金 立 忠 摄

Transcription:

在正常情况下,Kafka 中的每个 Topic 都会有很多个分区, 每个分区又会存在多个副本 在这些副本中, 存在一个 leader 分区, 而剩下的分区叫做 follower, 所有对分区的读写操作都是对 leader 分区进行的 所以当我们向 Kafka 写消息或者从 Kafka 读取消息的时候, 必须先找到对应分区的 Lea der 及其所在的 Broker 地址, 这样才可以进行后续的操作 本文将要介绍的就是 Kafka 是如何找到 leader 分区的 我们知道, Kafka 是使用 Scala 语言编写的, 但是其支持很多语言的客户端, 包括 :C/C++ PHP G o 以及 Ruby 等等 ( 参见 https://cwiki.apache.org/confluence/display/kafka/clients ) 这是为什么呢? 这是因为 Kafka 内部实现了一套基于 TCP 层的协议, 只要使用这种协议与 Kaf ka 进行通信, 就可以使用很多语言来操作 Kafka 目前 Kafka 内部支持多达 30 多种协议, 本文介绍的 Kafka 客户端是如何找到 leader 分区就涉及到 Kafka 内部的 Metadata 协议 Metadata 协议主要解决以下四种问题 : Kafka 中存在哪些主题? 每个主题有几个分区? Leader 分区所在的 broker 地址及端口? 每个 broker 的地址及端口是多少? 客户端只需要构造相应的请求, 并发送到 Broker 端, 即可获取到上面四个问题的答案 整个过程如下 : 客户端构造相应的请求客户端将请求发送到 Broker 端 Broker 端接收到请求处理, 并将结果发送到客户端 Metadata 请求协议 (v0-v3 版本 ) 如下 : TopicMetadataRequest => [TopicNames] TopicNames => string 客户端只需要构造一个 TopicMetadataRequest, 里面包括我们需要查询主题的名字 (TopicNam es); 当然, 我们可以一次查询多个主题, 只需要将这些主题放进 List 里面即可 同时, 我们还可以不传入任何主题的名字, 这时候 Kafka 将会把内部所有的主题相关的信息发送给客户端 1 / 7

目前 Metadata 请求协议存在五个版本,v0-v3 版本格式一致 但是这些协议存在一个问题 : 当 Kafka 服务器端将 auto.create.topics.enable 参数设置为 ture 时, 如果我们查询的主题不存在,Kafka 将会自动创建这个主题, 这很可能不是我们想要的结果 所以, 基于这个问题, 到了 Metadata 请求协议第五版, 格式已经变化了, 如下 : Metadata Request (Version: 4) => [TopicNames] allow_auto_topic_creation TopicNames => STRING allow_auto_topic_creation => BOOLEAN 我们可以指定 allow_auto_topic_creation 参数来告诉 Kafka 是否需要在主题不存在的时候创建, 这时候控制权就在我们了 Kafka 的 Broker 收到客户端的请求处理完之后, 会构造一个 TopicMetadataResponse, 并发送给客户端 TopicMetadataResponse 协议的格式如下 : MetadataResponse => [Broker][TopicMetadata] Broker => NodeId Host Port (any number of brokers may be returned) NodeId => int32 Host => string Port => int32 TopicMetadata => TopicErrorCode TopicName [PartitionMetadata] TopicErrorCode => int16 PartitionMetadata => PartitionErrorCode PartitionId Leader Replicas Isr PartitionErrorCode => int16 PartitionId => int32 Leader => int32 Replicas => [int32] Isr => [int32] 可以看到, 相应协议里面包含了每个分区的 Leader Replicas 以及 Isr 信息, 同时还包括了 Kafka 集群所有 Broker 的信息 如果处理出现了问题, 会出现相应的错误信息码, 主要包括下面几个 : UnknownTopic (3) LeaderNotAvailable (5) InvalidTopic (17) TopicAuthorizationFailed (29) 2 / 7

而且,Metadata 协议是目前唯一一个可以向任何 Broker 发送的协议 因为任何一个 Broker 在启动之后会存储这些 Metadata 信息的 而且,Kafka 提供的客户端在获取到 Metadata 信息之后也会将它存储到内存中的 并且在以下几种情况会更新已经缓存下来的 Metadata 信息 : 在 meta data.max.age.ms 参数配置的时间过期之后 ; 在往 Kafka 发送请求是收到 Not a Leader 异常 以上两种情况 Kafka 提供的客户端会自动再发送一次 Metadata 请求, 这样就可以获取到更新的信息 整个过程如下 : 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 好了, 说了半天的, 我们来看看程序里面如何构造 TopicMetadataRequest 以及处理 TopicMetadataResponse package com.iteblog.kafka import kafka.api.topicmetadatarequest._ import kafka.api.{topicmetadatarequest, TopicMetadataResponse import kafka.consumer.simpleconsumer 3 / 7

///////////////////////////////////////////////////////////////////// User: 过往记忆 Date: 2017 年 07 月 28 日 Time: 22:12:43 bolg: https://www.iteblog.com 本文地址 :https://www.iteblog.com/archives/2215 过往记忆博客, 专注于 hadoop hive spark shark flume 的技术博客, 大量的干货过往记忆博客微信公共帐号 :iteblog_hadoop ///////////////////////////////////////////////////////////////////// object MetaDataDemo { def main(args: Array[String]): Unit = { val consumer = new SimpleConsumer("1.iteblog.com", 9092, 50, 1024 * 4, DefaultClientId) val req: TopicMetadataRequest = new TopicMetadataRequest(CurrentVersion, 0, DefaultClie ntid, List("iteblog_hadoop")) val resp: TopicMetadataResponse = consumer.send(req) println("broker Infos:") println(resp.brokers.mkstring("\n\t")) val metadata = resp.topicsmetadata metadata.foreach { topicmetadata => val partitionsmetadata = topicmetadata.partitionsmetadata partitionsmetadata.foreach { partitionmetadata => println(s"partitionid=${partitionmetadata.partitionid\n\tleader=${partitionmetadata.l eader" + s"\n\tisr=${partitionmetadata.isr\n\treplicas=${partitionmetadata.replicas") TopicMetadataRequest 是通过 SimpleConsumer 的 send 方法发送的, 其返回的是 TopicMetadataResponse, 其中就包含了我们需要的信息 运行上面的程序输出如下 : Broker Infos: id:5,host:5.iteblog.com,port:9092 id:1,host:1.iteblog.com,port:9092 id:6,host:6.iteblog.com,port:9092 id:2,host:2.iteblog.com,port:9092 id:7,host:7.iteblog.com,port:9092 id:3,host:3.iteblog.com,port:9092 id:8,host:8.iteblog.com,port:9092 4 / 7

id:4,host:4.iteblog.com,port:9092 partitionid=0 isr=vector(id:1,host:1.iteblog.com,port:9092) replicas=vector(id:1,host:1.iteblog.com,port:9092, id:8,host:8.iteblog.com,port:9092) partitionid=1 leader=some(id:2,host:2.iteblog.com,port:9092) isr=vector(id:2,host:2.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) replicas=vector(id:2,host:2.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) partitionid=2 leader=some(id:3,host:3.iteblog.com,port:9092) isr=vector(id:3,host:3.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) replicas=vector(id:3,host:3.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) partitionid=3 leader=some(id:4,host:4.iteblog.com,port:9092) isr=vector(id:4,host:4.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) replicas=vector(id:4,host:4.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) partitionid=4 leader=some(id:5,host:5.iteblog.com,port:9092) isr=vector(id:5,host:5.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) replicas=vector(id:5,host:5.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) partitionid=5 leader=some(id:6,host:6.iteblog.com,port:9092) isr=vector(id:6,host:6.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) replicas=vector(id:6,host:6.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) partitionid=6 leader=some(id:7,host:7.iteblog.com,port:9092) isr=vector(id:6,host:6.iteblog.com,port:9092, id:7,host:7.iteblog.com,port:9092) replicas=vector(id:7,host:7.iteblog.com,port:9092, id:6,host:6.iteblog.com,port:9092) partitionid=7 leader=some(id:8,host:8.iteblog.com,port:9092) isr=vector(id:8,host:8.iteblog.com,port:9092) replicas=vector(id:8,host:8.iteblog.com,port:9092, id:7,host:7.iteblog.com,port:9092) partitionid=8 isr=vector(id:2,host:2.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) replicas=vector(id:1,host:1.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) partitionid=9 leader=some(id:2,host:2.iteblog.com,port:9092) isr=vector(id:3,host:3.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) replicas=vector(id:2,host:2.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) partitionid=10 leader=some(id:3,host:3.iteblog.com,port:9092) isr=vector(id:4,host:4.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) replicas=vector(id:3,host:3.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) partitionid=11 5 / 7

leader=some(id:6,host:6.iteblog.com,port:9092) isr=vector(id:6,host:6.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) replicas=vector(id:6,host:6.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) partitionid=12 leader=some(id:7,host:7.iteblog.com,port:9092) isr=vector(id:7,host:7.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) replicas=vector(id:7,host:7.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) partitionid=13 leader=some(id:8,host:8.iteblog.com,port:9092) isr=vector(id:8,host:8.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) replicas=vector(id:8,host:8.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) partitionid=14 isr=vector(id:1,host:1.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) replicas=vector(id:1,host:1.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) partitionid=15 leader=some(id:2,host:2.iteblog.com,port:9092) isr=vector(id:2,host:2.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) replicas=vector(id:2,host:2.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) partitionid=16 leader=some(id:3,host:3.iteblog.com,port:9092) isr=vector(id:3,host:3.iteblog.com,port:9092, id:7,host:7.iteblog.com,port:9092) replicas=vector(id:3,host:3.iteblog.com,port:9092, id:7,host:7.iteblog.com,port:9092) partitionid=17 leader=some(id:4,host:4.iteblog.com,port:9092) isr=vector(id:4,host:4.iteblog.com,port:9092, id:8,host:8.iteblog.com,port:9092) replicas=vector(id:4,host:4.iteblog.com,port:9092, id:8,host:8.iteblog.com,port:9092) partitionid=18 leader=some(id:5,host:5.iteblog.com,port:9092) isr=vector(id:5,host:5.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) replicas=vector(id:5,host:5.iteblog.com,port:9092, id:1,host:1.iteblog.com,port:9092) partitionid=19 leader=some(id:6,host:6.iteblog.com,port:9092) isr=vector(id:6,host:6.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) replicas=vector(id:6,host:6.iteblog.com,port:9092, id:2,host:2.iteblog.com,port:9092) partitionid=20 leader=some(id:7,host:7.iteblog.com,port:9092) isr=vector(id:7,host:7.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) replicas=vector(id:7,host:7.iteblog.com,port:9092, id:3,host:3.iteblog.com,port:9092) partitionid=21 leader=some(id:8,host:8.iteblog.com,port:9092) isr=vector(id:8,host:8.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) replicas=vector(id:8,host:8.iteblog.com,port:9092, id:4,host:4.iteblog.com,port:9092) partitionid=22 isr=vector(id:1,host:1.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) 6 / 7

Powered by TCPDF (www.tcpdf.org) replicas=vector(id:1,host:1.iteblog.com,port:9092, id:5,host:5.iteblog.com,port:9092) 上面的输出就可以看到各个分区的 leader 所在机器 isr 以及所有 replicas 等信息 有一点我们需要注意, 因为目前存在多个版本的 Metadata 请求协议, 我们可以使用低版本的协议与高版本的 Kafka 集群进行通信, 因为高版本的 Kafka 能够支持低版本的 Metadata 请求协议 ; 但是我们不能使用高版本的 Metadata 请求协议与低版本的 Kafka 通信 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 7 / 7