2016-04-28 13 views
2

私のApacheカフカプロデューサー(0.9.0.1)が断続的にカフカは私がcatch (final ExecutionException executionException) {}ブロック内NotLeaderForPartitionExceptionをキャッチ似ているにこのorg.apache.kafka.common.errors.NotLeaderForPartitionExceptionsを無視できますか?

final Future<RecordMetadata> futureRecordMetadata = KAFKA_PRODUCER.send(new ProducerRecord<String, String>(kafkaTopic, UUID.randomUUID().toString(), jsonMessage)); 

try { 
    futureRecordMetadata.get(); 
} catch (final InterruptedException interruptedException) { 
    interruptedException.printStackTrace(); 
    throw new RuntimeException("sendKafkaMessage(): Failed due to InterruptedException(): " + sourceTableName + " " + interruptedException.getMessage()); 
} catch (final ExecutionException executionException) { 
    executionException.printStackTrace(); 
    throw new RuntimeException("sendKafkaMessage(): Failed due to ExecutionException(): " + sourceTableName + " " + executionException.getMessage()); 
} 

を送る行い

org.apache.kafka.common.errors.NotLeaderForPartitionException 

私のコードをスローします。

この例外は無視してもよろしいですか?

私のカフカメッセージは正常に送信されましたか?

答えて

5

私はカフカを初めて利用していますが、NotLeaderForPartitionExceptionを受け取った場合、私の理解から、ではありません。

各トピックは1つまたは複数のブローカーによって提供されます(1つのリーダー、残りのブローカーはフォロワーと呼ばれます)。プロデューサはリーダーBroker(内部ですべてのフォロワーにデータを複製)に新しいメッセージを送信する必要があります。

私はあなたのプロデューサークライアントが正しいブローカー、すなわちリーダーの代わりにフォロワーに接続せず、このフォロワーがあなたの送信要求を拒否すると仮定します。

関連する問題