【发布时间】:2021-07-18 20:21:53
【问题描述】:
我一直在为我的项目使用 kafka 集群进行一些性能测试。我对发送调用和生产者的“acks”属性有疑问。我观察到下面的数字与下面的发送调用调用。这是一个简单的火灾和忘记呼叫。
producer.send(record); // fire and forget call
该主题有 5 个分区,我看到下面的结果具有不同的 ack 值和复制因子。 kafka 集群有 5 个节点以默认值运行并使用本地磁盘
acks Replication factor=1 Replication factor=3
0 1330k msgs/sec 1260k msgs/sec
1 1220k msgs/sec 1200k msgs/sec
-1(all) 1220k msgs/sec 325k msgs/sec
正如您所见,随着 acks 值从 0 变为 all,生产者吞吐量降低。我无法理解的是,如果生产者发送调用本质上是触发并忘记(见上文)并且生产者不等待任何确认,那么为什么生产者吞吐量会随着我们转向更强的确认保证而下降?
任何关于 Acks 和生产者发送调用如何在 Kakfa 内部工作的见解将不胜感激。
附:我曾在 kafka 用户邮件列表上问过这个问题,但没有得到回复,所以在 SO 上问这个问题。
【问题讨论】:
标签: java apache-kafka kafka-producer-api