根据我的阅读,带有 acks=0 的 Kafka 基本上只是将消息推送到生产者缓冲区。它不等待任何类型的确认。有了这个,我想知道它与异步生产者有什么不同?acks 如何影响异步生产者?
1 回答
卡夫卡制作人
在 Kafka 中,生产者分为三种类型,主要分为异步和同步。
- 同步生产者确认 = 0(即发即弃)
- 同步生产者 Acks = 1 或 Acks = all
- 异步生产者
同步生产者确认 = 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
. 如果以前的消息没有任何响应,则异步消息的数量将限制在此数量。因此,如果这已满,异步生产者将再次被阻塞,直到此响应到达生产者。
更多信息,请参考