我正在运行0.8 Kafka,并使用提供的Java API构建生产者 发送消息(或消息)的API函数返回void。
有没有办法获取已发送邮件的状态?如果发送或失败?
这对我们来说非常重要,因为我们正在从文件中读取消息,并且我们希望在发送所有消息后删除该文件。但是如果有错误并且没有发送一些消息,我删除了该文件会导致丢失非常重要的数据。
答案 0 :(得分:2)
您可以将生产者配置为等到它从Kafka集群获取n ack(request.required.acks),这样您就可以保证在删除源文件之前已正确提交数据。
如果确实您需要确保发送的消息成功,您可能需要考虑使生产者同步的替代方法(producer.type = sync)。这样,您就可以捕获阻塞调用抛出的任何异常并相应地执行操作。 send()抛出的异常是kafka.common.FailedToSendMessageException。
Kafka的Java API并不理想,希望这会对您有所帮助。