Kafka:生成Kafka主题记录时发生异常

vmpqdwk3  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(463)

我在制作Kafka主题的唱片时遇到以下例外:

java.lang.RuntimeException: This server is not the leader for that topic-partition.

下面是向Kafka主题发送记录的代码。

AtomicReference<Exception> exRef = new AtomicReference<>();
while([some condition]) {
    producer.send(new ProducerRecord<>(topic, message), (metadata, exception) -> {
        if (exception != null) {
            exRef.set(exception);
        }
    });
    if (exRef.get() != null) {
        throw new RuntimeException(exRef.get().getMessage(), exRef.get().getCause());
    }
}

我只想知道这个例外的原因是什么?如何预防?

aelbi1ox

aelbi1ox1#

每个主题分区都有一个leader代理,负责服务于来自客户端的所有读/写请求(如果复制大于一个,则多个follower代理只复制来自该分区leader代理的数据,而不服务于来自客户端的任何读/写请求)。在启动客户机时,客户机查询集群以获取它需要从/写入的每个分区的前导,并缓存此元数据。
可能会发生这样的情况:主题分区的领导层由于不同的原因从一个代理移动到另一个代理(即,跟随者成为领导层)(例如,代理发生故障--在恢复之后,它可能不再是领导层,而是跟随者,因为不需要将领导层转移回去--或者如果发出了管理命令,将分区移动到其他代理)。
如果发生这种情况,客户机的元数据将不再正确,您将得到相应的异常。因此,从客户的Angular 来看,您无法阻止这种情况的发生。但是,您可以简单地创建一个新的客户端示例,它将重新发现新的领导者,并且您的应用程序可以从此处恢复。

相关问题