繁体   English   中英

Kafka:产生有关Kafka主题的记录时发生异常

[英]Kafka: Exception while producing records on Kafka topic

我在生成有关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());
    }
}

我只需要知道发生此异常的原因是什么? 怎么预防呢?

每个主题分区都有一个领导者经纪人,负责处理来自客户端的所有读/写请求(如果复制大于一个,则多个跟随者经纪人仅复制来自该领导者经纪人的数据,而不提供任何读取服务) /写来自客户的请求)。 客户端启动时,客户端查询群集以获取其从中读取/写入所需的每个分区的领导者,并缓存该元数据。

可能会发生以下情况:某个主题分区的领导权从一个经纪人转移到另一个经纪人(即,跟随者成为领导者)是出于不同的原因(例如,经纪人崩溃了-恢复后,它可能不再是领导者,但是请成为追随者,因为无需将领导移回-或如果发出了admin命令,则可以将分区移至其他代理)。

如果发生这种情况,则客户端的元数据不再正确,您将获得相应的异常。 因此,从客户的角度来看,您无法阻止这种情况的发生。 但是,您可以简单地创建一个新的客户端实例,该实例将重新发现新的领导者,您的应用程序可以从那里恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM