Apache kafka 为什么Kafka Producer ack=all在发送同步消息时速度如此之慢

Apache kafka 为什么Kafka Producer ack=all在发送同步消息时速度如此之慢,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我有一个Kafka版本:0.9.0.1应用程序,它与ack=all同步发送消息 通过此设置,我每秒收到的信息约为75条 当我更改为ack=1时,我将吞吐量增加到每秒453条消息 为什么ack=all运行速度慢6倍 我的目标Kafka主题的单个分区和复制设置为3 有什么方法可以提高ack=all的性能吗?没有方法,因为ack设置是为了在性能和丢失数据的更改之间进行权衡而设计的。 因此,您不能同时选择两者。没有办法,因为ack设置是为在性能和丢失数据的更改之间进行权衡而设计的。 所以,你不能两者兼而

我有一个
Kafka版本:0.9.0.1
应用程序,它与
ack=all
同步发送消息

通过此设置,我每秒收到的信息约为75条

当我更改为
ack=1
时,我将吞吐量增加到每秒453条消息

为什么
ack=all
运行速度慢6倍

我的目标Kafka主题的单个分区和复制设置为3


有什么方法可以提高
ack=all
的性能吗?

没有方法,因为ack设置是为了在性能和丢失数据的更改之间进行权衡而设计的。
因此,您不能同时选择两者。

没有办法,因为ack设置是为在性能和丢失数据的更改之间进行权衡而设计的。 所以,你不能两者兼而有之

有没有办法提高ack=all的性能

在启用消息重试的情况下使用异步发送。消息将成批发送,您将获得更好的吞吐量

异步发送并不意味着丢失数据,可以利用消息重试和消息发送回调来保证发送成功,即使
(复制因子-min.insync.replications)
代理关闭

有没有办法提高ack=all的性能

在启用消息重试的情况下使用异步发送。消息将成批发送,您将获得更好的吞吐量


异步发送并不意味着丢失数据,可以利用消息重试和消息发送回调来保证发送成功,即使
(复制因子-min.insync.replicas)
代理停止。

我明白了,但为什么从三台服务器获取ack的速度比从1台服务器慢6倍?当您发送消息:客户端-->领队-->副本时。然后leader等待所有副本确认发送给leader,然后leader将确认发送给客户端:副本-->leader-->客户端。我认为当replica=3时,它的速度应该是2-4倍,但一般来说,网络时间是不可预测的。我预计ack=all会比ack=1慢,但我们看到的速度是6-8倍(实际上更接近8倍)。我预计最多会慢3-4倍。我怎样才能发现Kafka是如何实现ack=all的呢?我明白了,但为什么在发送消息时,从三台服务器获取ack的速度比从1获取ack慢6倍呢。然后leader等待所有副本确认发送给leader,然后leader将确认发送给客户端:副本-->leader-->客户端。我认为当replica=3时,它的速度应该是2-4倍,但一般来说,网络时间是不可预测的。我预计ack=all会比ack=1慢,但我们看到的速度是6-8倍(实际上更接近8倍)。我预计最多会慢3-4倍。如何发现Kafka是如何实现ack=all的?我不能让消息重新尝试,因为这可能会导致消息顺序错误。我必须使用同步发送我不能让消息重新尝试,因为这可能会导致消息顺序错误。我必须使用同步发送