微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kafka async 和 Kafka sync acks=0 之间的区别?

如何解决Kafka async 和 Kafka sync acks=0 之间的区别?

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

解决方法

Kafka 生产者

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

  1. 同步生产者确认 = 0(即发即弃)
  2. 同步生产者确认 = 1 或确认 = 全部
  3. 异步制作者

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

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

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

同步生产者确认 = 1 或确认 = 全部

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

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

异步生成器

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

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

更多信息,请参考

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。