Kafka Cluster元数据在客户端缓存采用的数据结构
看Cluster类的数据结构
1个Node就代表1个Broker,也就代表了1台机器:
private final List<Node> nodes;
Set维护了Kafka没有被授权访问的Topic列表:
//没有被授权访问的Topic列表
private final Set<String> unauthorizedTopics;
由此可见Kafka支持权限控制,如果客户端没有授权访问某个Topic,它就会被放在此处
对于Cluster,还通过一些数据结构,维护了客户端缓存的topic和partition的元数据:
//Topic对应的分区的详细信息
private final Map<TopicPartition, PartitionInfo> partitionsByTopicPartition;
TopicPartition代表了1个分区,里面有topic的名字、partition的分区号;
PartitionInfo是分区的详细信息:属于哪个topic,分区号,每个分区都有多个副本,Leader在哪个broker上,followers在哪些broker上,ISR列表,都在里面
每个Topic有哪些分区:
//1个Topic,有哪些分区
private final Map<String, List<PartitionInfo>> partitionsByTopic;
每个Topic有哪些可用的分区:
//每个Topic有哪些当前可用的分区:如果某个分区没有leader存活,这个分区就不可用了
private final Map<String, List<PartitionInfo>> availablePartitionsByTopic;
每个Broker上放了哪些分区:
//每个Broker上放了哪些分区
private final Map<Integer, List<PartitionInfo>> partitionsByNode;
Broker id映射到Node:
//broker.id ---> Node
private final Map<Integer, Node> nodesById;
由此可见,KafkaProducer初始化时,并没有对集群元数据全拉取,而是对集群元数据进行了初始化。
后面再拉取的时候,肯定会将这些元数据统统拉取到客户端以这些数据结构缓存起来
通过Debug可以看到,此时的Cluster状况是:
Cluster(nodes= [loaclhost:9092 (id: -1 rack: null)],partitions = [])
nodes里仅仅只有我们传进来的那个Node,id还是-1,且没有任何的分区。然后,KafkaProducer的整个update操作就完成了。再往后就是去初始化网络通信组件、发送线程、拦截器等。等KafkaProducer初始化完毕了之后,Metadata里的cluster信息:
Cluster(nodes= [DESKTOP-FV82PGK:9092 (id: 0 rack: null)],partitions = [])
只是把我们配置的Broker地址放进去,并没有真正的拉取集群元数据
Kafka Cluster元数据在客户端缓存采用的数据结构相关推荐
- Redis系列(十四)、Redis6新特性之RESP3与客户端缓存(Client side caching)
Redis6引入新的RESP3协议,并以此为基础加入了客户端缓存的新特性,在此特性下,大大提高了应用程序的响应速度,并降低了数据库的压力,本篇就带大家来看一下Redis6的新特性:客户端缓存. 目录 ...
- Redis 6 将采用全新协议 RESP3,以提供客户端缓存功能
Redis 创始人兼核心开发者 antirez 在博客介绍了将在 Redis 6 提供的新功能 -- Client side caching(客户端缓存). antirez 表示全新的 Redis 协 ...
- 漫游Kafka实战篇之客户端编程实例
原文地址:http://blog.csdn.net/honglei915/article/details/37697655 Kafka视频教程同步首发,欢迎观看! Kafka Producer API ...
- 【译】antirez:Redis6将支持客户端缓存
本文翻译自Redis作者antirez的一篇博客,原文地址是:http://antirez.com/news/130 纽约Redis日已经结束了,我仍然与意大利时区同步,早上5点30起床,并立即走上了 ...
- Servlet防止页面被客户端缓存
服务器端的HttpServlet可通过设置特定HTTP响应头来禁止客户端缓存网页,以下示范代码中的response变量引用HttpServletResponse对象: response.addHead ...
- 带你100% 地了解 Redis 6.0 的客户端缓存
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 近日 Redis 6.0.0 GA 版本发布,这是 Redis 历 ...
- Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!
来源 | 程序员历小冰 责编 | Carol 封图 | CSDN 付费下载于视觉中国 近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Cl ...
- linux安装telnet客户端_Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!
来源 | 程序员历小冰责编 | Carol封图 | CSDN 付费下载于视觉中国近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Clien ...
- 客户端缓存和服务器缓存处理
问题?客户端缓存和服务器缓存处理 一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernat ...
最新文章
- php中去空函数trim,PHP中trim()函数简单使用指南
- Google正式将网速列为网站排名因素
- 元计算:IT巨头的金钱收割机,核武器
- php pdo.dll不存在,php pdo.dll没有找到怎么办
- sap.ui.layout.HorizontalLayout is not a constructor
- mvvm 自动绑定_ZK的实际应用:MVVM –表单绑定
- IP协议包中的TTL(Time-To-Live)
- big sur 黑苹果_苹果宣布11日再开发布会!自研芯片届时或将发布!
- Spring Cloud与微服务学习总结(6)——认证鉴权与API权限控制在微服务架构中的设计与实现(四)
- [中级01]java为什么能跨平台,而C\C++语言不能跨平台
- Linux中常用命令(文件)
- CPU Usage (C#) 测试
- 在linux上安装svn
- html5拆红包源码,最新1月拆红包源码强制分享朋友圈分享群防封裂变红包游戏
- Jmeter设置之ramp-up
- 网页怎么算切屏_十种切屏抓取方法(图形)
- LQ0266 巧排扑克牌【模拟】
- PADS打开PCB文件时出现提示:发生严重的运行时错误。
- python:静态方法
- 一文读懂C++虚函数的内存模型
热门文章
- 分区和分片的区别_数据库的分表、分库、分片和分区等区别
- mysql 编译_mysql 5.7 编译——VS2017
- 2019手机浏览器排名_浏览器排行榜2019年1月浏览器市场份额排名
- 办公用笔记本电脑哪个好_北京中仓红色办公沙发哪个品牌好
- iptables的conntrack表满了导致访问网站很慢
- [转]新版.Net开发必备十大工具
- 在温暖的南方惠州①月了。。
- IT从业人员必看的10大论坛(ZT)
- 《Angular4从入门到实战》学习笔记
- ASP.NET MVC 导入Excel文件