apache-kafka - Kafka 经纪人间通信
问题描述
我了解生产者/消费者需要与经纪人交谈以了解分区的领导者。经纪人与 zk 交谈,告诉他们他们加入了集群。
是不是真的
- 经纪人从 zk 知道谁是给定分区的领导者
- zk 检测到经纪人离开/死亡。然后它重新选举领导者并向所有经纪人发送新的领导者信息
问题:
- 为什么我们需要经纪人相互沟通?只是这样tehy可以移动分区还是它们也可以相互查询元数据。如果是这样,元数据交换的例子是什么
解决方案
生产者/消费者从一个代理请求元数据(因为他们每个人都缓存它),这就是他们知道谁是分区领导者的方式。
关于“这是真的”部分:
- 由于 zk 和其中之一,经纪人知道谁是给定分区的领导者。更准确地说,他们中的一个决定谁将成为领导者。该代理称为控制器。第一个连接到 zookeeper 的代理成为控制器,他的角色是决定哪个代理将成为领导者,哪些将成为副本,并通知他们。控制器本身不排除在此过程之外。它是一个像任何其他代理一样具有选择领导者和副本的特殊责任的代理
- zk 确实检测到经纪人何时死亡/离开,但它不会重新选举领导者。这是控制器的责任。当其中一个代理离开集群时,控制器从 zk 获取信息并开始重新分配
关于您的问题-代理确实相互通信(副本正在读取来自领导者的消息,控制器正在通知其他代理有关更改),但它们之间不交换元数据-它们将元数据写入动物园管理员
推荐阅读
- aws-cdk - 如何从 AwsCustomResource (service: 'SecretsManager', action: 'getSecretValue') 返回的 SecretString 中获取纯文本值?
- .net - 在 macOS 上编译 F# 项目时,如何确保编译器可以找到 Mono 程序集“System.Numerics.dll”?
- html - 一个按钮就是不想居中
- javascript - 在打字稿中的类型之间转换时,有没有办法转换底层对象
- r - 如何计算 data.frame 的双边 t.test,其中 X 和 Y 的标准在另一列中指定?
- java - 将 Eclipse 中的 JavaFX 项目导出到可运行的 jar
- vue.js - 在 lunix 上运行 npm run build 时它不起作用
- kotlin - 函数接收器和@RestrictsSuspension
- javascript - 在 react.js 中为测验处理多个单选和复选框
- r - R - ifelse 不充当矢量化函数?