4

根据我的阅读,带有 acks=0 的 Kafka 基本上只是将消息推送到生产者缓冲区。它不等待任何类型的确认。有了这个,我想知道它与异步生产者有什么不同?acks 如何影响异步生产者?

4

1 回答 1

4

卡夫卡制作人

在 Kafka 中,生产者分为三种类型,主要分为异步和同步。

  1. 同步生产者确认 = 0(即发即弃)
  2. 同步生产者 Acks = 1 或 Acks = all
  3. 异步生产者

同步生产者确认 = 0(即发即弃)

在 Fire and Forget Scenario 中,我们不等待任何响应,也没有任何重试。因此,无法保证消息是否已传递。所以在这种情况下

  • 可能丢失消息
  • 高吞吐量
  • 不重试

同步生产者 Acks = 1 或 Acks = all

在 Sync producer withacks = 1中,producer 会等待分区 leader 的响应。所以只有分区领导经纪人有保证。但是如果领导代理崩溃并且没有同步副本,则可能会丢失消息。吞吐量低于 Async 和 Fire and Forget 和 retries 作为生产者重试配置。

在 Sync producer withacks = all中,producer 会等待分区的 leader 和所有 In sync Replica 的响应。所以分区领导代理和同步副本代理有保证。我们可以通过配置确保同步副本的数量Min In sync Replica。吞吐量最低,重试作为生产者重试配置。但最可靠的生产商。

异步生产者

Async Producer 与 Fire and Forget 生产者几乎相同,但存在一些差异。它有一个回调函数来获取代理端是否有任何响应。但是生产者并没有等待那个响应,它正在后台发生。因此,不同之处在于如果代理发送一些生产者错误并且有重试,则有跟踪。由于异步重试,消息的顺序无法保证。

并且有一个配置叫做max.in.flight.requests.per.connection. 如果以前的消息没有任何响应,则异步消息的数量将限制在此数量。因此,如果这已满,异步生产者将再次被阻塞,直到此响应到达生产者。

更多信息,请参考

于 2021-06-11T04:17:25.267 回答