如果在生成Kafka主题记录时出现任何故障,则会使进程失败

时间:2017-01-27 07:39:43

标签: apache-kafka kafka-producer-api

我希望KafkaProducer因为任何原因在kafka主题上生成记录时失败而导致进程失败。

我发送的记录如下:

for(String message : messages) {
    producer.send(new ProducerRecord<>(topic, message), (metadata, ex) -> {
        if (ex != null) {
            throw new RuntimeException(ex.getMessage());
        }
    });
}

我在电话中抛出异常。所以我的期望是该过程将失败,显然for循环继续执行。

一旦我们在Callback中遇到任何异常,如何使发送过程失败?

1 个答案:

答案 0 :(得分:0)

首先,如果send命令成功,变量“ex”将为null,因此,查看您包含的代码,只要消息成功发送,就不会抛出RuntimeException。 p>

如果您想强制错误检查哪种行为我建议您停止所有经纪人,然后尝试发送消息。一段时间后,当超时发生时,您将能够在回调中看到异常。

总结:

    Successful send: (metadata != null, ex == null)
    Failed send:     (metadata == null, ex != null)

P.S。请记住在抛出异常时关闭生产者:

    for(String message : messages) {
        producer.send(new ProducerRecord<>(topic, message), (metadata, ex) -> {
            if (ex != null) {
                producer.close();
                throw new RuntimeException("Exception Happened: " + ex.getMessage());
            }
        });
    }