我在我的producer上看到org.apache.kafka.common.errors.notleaderforpartitionexception,我知道当producer尝试向不是分区的引导者的代理生成消息时会发生这种情况。这是否意味着每次领导者完成一个写请求时,它都会首先检查其是否是领导者?如果是的话,这是否转化为zookeeper请求每个写入请求,以知道节点是否是领导者?
我在我的producer上看到org.apache.kafka.common.errors.notleaderforpartitionexception,我知道当producer尝试向不是分区的引导者的代理生成消息时会发生这种情况。这是否意味着每次领导者完成一个写请求时,它都会首先检查其是否是领导者?如果是的话,这是否转化为zookeeper请求每个写入请求,以知道节点是否是领导者?
1条答案
按热度按时间46scxncf1#
如何获取有关代理的元数据
producer向您在配置producer时提供的代理之一发送带有主题列表的元请求。
来自代理的响应包含这些主题中的分区列表以及每个分区的前导。生产者缓存这些信息,因此,它知道在哪里重定向消息。
生产者何时刷新元数据
我认为这取决于您使用的kafka客户端。ruby、java或其他kafka客户端之间有一些小的区别。例如,在java中:
生产者将在客户端初始化时获取元数据,然后根据过期时间进行周期更新。
当发生请求错误时,生产者还将强制更新元数据,例如
InvalidMetadataException
.但在ruby-kafka客户机中,通常在出错或初始化时刷新元数据。