繁体   English   中英

如果在Kafka主题上生成记录时出现任何失败,则使该过程失败

[英]Fail the process if any failure while producing record on Kafka topic

每当KafkaProducer因任何原因在kafka主题上生成记录时,我想使该过程失败。

我正在发送如下记录:

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

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

一旦回调出现异常,如何使发送过程失败?

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

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

总结一下:

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

PS切记在引发异常时关闭生产者:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM