gpt4 book ai didi

apache-kafka - KafkaProducer.close() 和 KafkaProducer.flush() 的区别

转载 作者:行者123 更新时间:2023-12-04 15:45:18 63 4
gpt4 key购买 nike

查看文档,我不确定我是否理解使用 close() 之间的区别和 flush() .

这是flush()的文档

 * Invoking this method makes all buffered records immediately available to send (even if <code>linger.ms</code> is
* greater than 0) and blocks on the completion of the requests associated with these records. The post-condition
* of <code>flush()</code> is that any previously sent record will have completed (e.g. <code>Future.isDone() == true</code>).
* A request is considered completed when it is successfully acknowledged
* according to the <code>acks</code> configuration you have specified or else it results in an error.


和 close() 的文档:

 * This method waits up to <code>timeout</code> for the producer to complete the sending of all incomplete requests.
* If the producer is unable to complete all requests before the timeout expires, this method will fail
* any unsent and unacknowledged records immediately.


这是否意味着:
  • 如果我使用 close() 并且内存缓冲区中有一些记录未决,它们甚至不会被尝试(与flush相比,它会尝试发送它们)?
  • 如果我使用flush(),如果重试次数很大,它可能会“永远”阻塞?使用 close() 时,我有一个需要多长时间的上限?

  • 我想如果我在 1. 中是对的,一个 acks=0 的生产者会得到一个记录的确认,如果它“不幸”被放置在内存队列中,甚至可能不会被尝试发布在调用 close() 之后立即。

    最佳答案

    如果您想继续使用生产者并等待发送消息,您可以使用flush else close。 Close with timeout value 将等待根据配置发送消息并收到 ack 直到超时值,然后关闭生产者

    关于apache-kafka - KafkaProducer.close() 和 KafkaProducer.flush() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56043147/

    63 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com