Deepank Porwal:
Tengo escenario en el que Kafka se está abajo al azar. Cuando envío un mensaje a kafka y es por lo que quiero para manejar por separado. Pero cuando envío de mensajes a kafka mientras que se ha reducido, no es una excepción y está llegando, así que no soy capaz de identificar si Kafka no está funcionando o no. ¿Hay alguna manera puedo coger excepción y el mensaje perdido.
Tengo un código muy básico
public static void main(String[] args) {
String topicName = "test-1";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 10; i++) {
producer.send(new ProducerRecord<>(topicName, Integer.toString(i), Integer.toString(i)));
}
System.out.println("Message sent successfully");
producer.close();
}
Giorgos Myrianthous:
Es necesario enviar una llamada sincrónica con el fin de obtener una respuesta de vuelta Kafka.
for (int i = 0; i < 10; i++) {
ProducerRecord<String, String> record =
new ProducerRecord<>(topicName, Integer.toString(i), Integer.toString(i));
try {
producer.send(record).get();
} catch (Exception e) {
e.printStackTrace();
// Handle message that has failed
}
}
Método .get()
devolverá la respuesta de Kafka. Se producirá una excepción cuando el registro no ha podido ser empujado a Kafka. Cuando el registro ha sido enviado con éxito, a continuación, una RecordMetadata
será devuelto.