【发布时间】:2021-06-10 15:45:24
【问题描述】:
根据我的阅读,带有 acks=0 的 Kafka 基本上只是将消息推送到生产者缓冲区。它不会等待任何类型的确认。有了这个,我想知道它与异步生产者有什么不同? acks 如何影响异步生产者?
【问题讨论】:
标签: apache-kafka librdkafka ruby-kafka
根据我的阅读,带有 acks=0 的 Kafka 基本上只是将消息推送到生产者缓冲区。它不会等待任何类型的确认。有了这个,我想知道它与异步生产者有什么不同? acks 如何影响异步生产者?
【问题讨论】:
标签: apache-kafka librdkafka ruby-kafka
卡夫卡制作人
在 Kafka 中,生产者分为三种类型,主要分为异步和同步。
同步生产者确认 = 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。如果以前的消息没有任何响应,则异步消息的数量将限制在此数量。因此,如果这已满,异步生产者将再次被阻塞,直到此响应到达生产者。
更多信息,请参考
【讨论】:
num.of.retries配置生产者,它将重试。