Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception handling 我可以忽略org.apache.kafka.common.errors.NotLeaderForPartitionExceptions吗?_Exception Handling_Apache Kafka_Kafka Producer Api - Fatal编程技术网

Exception handling 我可以忽略org.apache.kafka.common.errors.NotLeaderForPartitionExceptions吗?

Exception handling 我可以忽略org.apache.kafka.common.errors.NotLeaderForPartitionExceptions吗?,exception-handling,apache-kafka,kafka-producer-api,Exception Handling,Apache Kafka,Kafka Producer Api,我的ApacheKafka制作人(0.9.0.1)间歇性地抛出 org.apache.kafka.common.errors.NotLeaderForPartitionException 我执行卡夫卡发送的代码类似于 final Future futurecordmetadata=KAFKA_PRODUCER.send(新产品记录(kafkaTopic,UUID.randomuid().toString(),jsonMessage)); 试一试{ futureRecordMetadata.ge

我的ApacheKafka制作人(0.9.0.1)间歇性地抛出

org.apache.kafka.common.errors.NotLeaderForPartitionException
我执行卡夫卡发送的代码类似于

final Future futurecordmetadata=KAFKA_PRODUCER.send(新产品记录(kafkaTopic,UUID.randomuid().toString(),jsonMessage));
试一试{
futureRecordMetadata.get();
}捕获(最终中断异常中断异常){
interruptedException.printStackTrace();
抛出新的RuntimeException(“SendKafCamessage():由于InterruptedException():”+sourceTableName+“”+InterruptedException.getMessage())而失败);
}捕获(最终执行异常执行异常){
executionException.printStackTrace();
抛出新的RuntimeException(“SendKafCamessage():由于ExecutionException()失败:”+sourceTableName+“”+ExecutionException.getMessage());
}
我在
catch(final ExecutionException ExecutionException){}
块中捕获
notleaderorpartitionexception

忽略这个特殊的异常可以吗


我的卡夫卡短信发送成功了吗?

如果您收到
notleaderorpartitionexception
,则您的数据未成功写入

根据您的复制因素,每个主题分区由一个或多个代理(具有一个引导者;其余代理称为跟随者)存储。生产者需要向leader Broker发送新消息(到追随者的数据复制在内部进行)


您的producer客户端未连接到正确的代理,即连接到跟随者而不是领导者(或连接到不再是跟随者的代理),并且此代理拒绝您的发送请求。如果leader已更改,但生产者仍有过时的缓存元数据,关于哪个代理是分区的领导者,这种情况可能会发生。

解决方案是什么?@VinitGaikwad生产者将首先在内部重试发送数据(并刷新其元数据以了解数据必须发送到的新领导者)——因此,应用程序只有在所有重试次数均已用尽时才会获得此异常。因此,您可能需要增加生产者的
retries
config参数。如果要在应用程序级别处理它(与增加生产者重试次数相比,was似乎是第二个最佳选项),则需要调用
producer.send()
,以重新发送数据。