Exception handling 我可以忽略org.apache.kafka.common.errors.NotLeaderForPartitionExceptions吗?
我的ApacheKafka制作人(0.9.0.1)间歇性地抛出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
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()
,以重新发送数据。