如何解决卡夫卡经纪人在响应读/写请求时是否总是检查其领导者
我在生产者上看到org.apache.kafka.common.errors.NotLeaderForPartitionException,据我了解,当生产者试图向非分区领导者的代理产生消息时,就会发生这种情况。 这是否意味着领导者每次满足写请求时,都会首先检查其领导者是否? 如果是,那么对于每个写入请求(该节点是否为领导者),这都转换为Zookeeper请求?
解决方法
生产者如何获取有关经纪人的元数据
生产者在配置生产者时向您提供的一个代理发送带有主题列表的元请求。
来自代理的响应包含这些主题中的分区列表以及每个分区的领导者。生产者缓存此信息,因此,它知道将消息重定向到何处。
生产者何时刷新元数据
我认为这取决于您使用的kafka客户端.ruby,java或其他kafka客户端之间有一些细微差别,例如在java中:
- 生产者将在客户端初始化时获取元数据,然后根据expiration time对其进行定期更新。
- 生产者还将在request error occured时强制更新元数据,例如
InvalidMetadataException
。
但是在ruby-kafka客户端中,通常会在发生错误或初始化时刷新元数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。