Никаких исключений не происходит при отправке сообщения, когда kafka не работает - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть сценарий, в котором кафка падает случайным образом.Когда я посылаю сообщение Кафке, и оно не работает, я хочу обработать его отдельно.Но когда я отправляю сообщение kafka, пока оно не работает, исключение не приходит, и поэтому я не могу определить, не работает kafka или нет.Есть ли способ, которым я могу поймать исключение и потерянное сообщение.

У меня есть очень простой код

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();
}

1 Ответ

0 голосов
/ 01 февраля 2019

Вам необходимо отправить синхронный вызов, чтобы получить ответ от Кафки.

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
    }
}

Метод .get() вернет ответ от Кафки.Он выдаст исключение, когда запись не будет отправлена ​​в Кафку.Когда запись будет успешно отправлена, будет возвращено RecordMetadata.

...