<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
|
|
51CTO旗下网站
|
|
移动端

2.2.2 元数据的更新

《深入理解Kafka:核心设计与实践原理》本书主要阐述了Kafka中生产者客户端、消费者客户端、主题与分区、日志存储、原理解析、监控管理、应用扩展及流式计算等内容。本节为大家介绍元数据的更新。

作者:朱忠华来源:电子工业出版社|2019-01-20 13:57

2.2.2 元数据的更新

2.2.1 节中提及的InFlightRequests 还可以获得leastLoadedNode,即所有Node 中负载最小的那一个。这里的负载最小是通过每个Node 在InFlightRequests 中还未确认的请求决定的,未确认的请求越多则认为负载越大。对于图2-2 中的InFlightRequests 来说,图中展示了三个节点Node0、Node1 和Node2,很明显Node1 的负载最小。也就是说,Node1 为当前的leastLoadedNode。选择leastLoadedNode 发送请求可以使它能够尽快发出,避免因网络?#31561;?#31561;异常而影响整体的进度。leastLoadedNode 的概念可以用于多个应用场合,比如元数据请求、消费者组播协议的交互。

我们使用如下的方式创建了一条消息ProducerRecord:

  1. ProducerRecord<String, String> record =  
  2. new ProducerRecord<>(topic, "Hello, Kafka!"); 

我们只知道主题的名称,对于其他一些必要的信息却一无所知。KafkaProducer 要将此消息追?#25317;?#25351;定主题的某个分区所对应的leader 副本之前,首先需要知道主题的分区数量,然后经过计算得出(或者直接指定)目标分区,之后KafkaProducer 需要知道目标分区的leader 副本所在的broker 节点的地址、端口等信息才能建立连接,最终才能将消息发送到Kafka,在这一过程中所需要的信息都属于元数据信息。

在2.1.1 节中我们了解了bootstrap.servers 参数只需要配置部分broker 节点的地址即可,不需要配置所有broker 节点的地址,因为客户端可以自己发现其他broker 节点的地址,这一过程也属于元数据相关的更新操作。与此同时,分区数量及leader 副本的分布都会动态地变化,客户端也需要动态地捕捉这些变化。

元数据是指Kafka 集群的元数据,这些元数据具体记录了集群中?#24515;?#20123;主题,这些主题?#24515;?#20123;分区,每个分区的leader 副本分配在哪个节点上,follower 副本分配在哪些节点上,哪些副本在AR、ISR 等集合中,集群中?#24515;?#20123;节点,控制器节点又是哪一个等信息。

当客户端中没有需要使用的元数据信息时,比如没有指定的主题信息,或者超过metadata.max.age.ms 时间没有更新元数据都会引起元数据的更新操作。客户端参数metadata.max.age.ms 的默认值为300000,即5 分钟。元数据的更新操作是在客户端内部进行的,对客户端的外部使用者不可见。当需要更新元数据时,会先挑选出leastLoadedNode,然后向这个Node 发送MetadataRequest 请求来获取具体的元数据信息。这个更新操作是由Sender线程发起的,在创建完MetadataRequest 之后同样会存入InFlightRequests,之后的步骤就和发送消息时的类似。元数据虽然由Sender 线程负责更新,但是主线程也需要读取这些信息,这里的数据同步通过synchronized 和final 关键字来保障。


?#19981;?#30340;朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你?#19981;?/dt>

订阅专栏+更多

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

216人订阅学习

Java EE速成指南

Java EE速成指南

掌握Java核心
共30章 | 51CTO王波

83人订阅学习

Mysql DBA修炼之路

Mysql DBA修炼之路

MySQL入门到高阶
共24章 | 武凤涛

468人订阅学习

读 书 +更多

程序员面试宝典

本书取材于各大IT公司历年面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试)。详细分析了应聘程序?#20445;?#21547;网络、测试等...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

澳洲幸运5官方
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
王者荣耀芈月的工口 足球北京单场开奖结果新浪网 456网络棋牌游戏害人 天津时时实体店 世界杯足彩下载app 全国开奖开奖公告360 龙虎榜什么意思 战狼团队精准彩票计划 黑龙江时时注册 重庆时时走势图怎么看