【问题标题】:Difference between Kafka async and Kafka sync acks=0?Kafka异步和Kafka同步acks = 0之间的区别?
【发布时间】:2021-06-10 15:45:24
【问题描述】:

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

【问题讨论】:

标签: apache-kafka librdkafka ruby-kafka


【解决方案1】:

卡夫卡制作人

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

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

同步生产者确认 = 0(一劳永逸)

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

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

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

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

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

异步生产者

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

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

更多信息,请参考

【讨论】:

  • 如果与代理的连接中断或代理关闭,Kafka 生产者 (ack=1) 是否会重试?
  • 是的,如果我们用num.of.retries配置生产者,它将重试。
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2020-05-19
  • 2019-06-17
相关资源
最近更新 更多