Apache Kafka 3.0 更新根据Apache Kafka 3.0公告 https://www.confluent.io/blog/apache-kafka-3-0-major-improvements-and-new-features生产者默认启用最强的交付保证(acks=all
, enable.idempotence=true
)。这意味着用户现在默认获得订购和持久性。
“幂等性会减慢我的端点速度吗?(这个端点需要非常快)”
Kafka 允许使用内部序列号以幂等方式生成消息。这是在代理端缓存和比较的,因此生成消息会更耗时。此外,虽然您可以有多个正在进行的写入请求,但如果一个请求失败,后续的几个请求也会失败,并出现可重试的 OutOfSequenceException,这也可能会减慢生产者的速度。
然而,与禁用幂等性的生产者相比,这两个确实是很小的补充,而且我不知道有任何综合基准来衡量吞吐量或延迟的差异。最好是在您的实际环境中进行测试。
“我读了 kafka api 文档,启用幂等性将使重试无限(什么?)”
根据配置说明启用幂等性 https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#enable.idempotence它说: ”当设置为“true”时,生产者将确保每条消息的一份副本准确写入流中。如果为“false”,则生产者由于代理故障等原因重试,可能会在流中写入重试消息的重复项。请注意,启用幂等性需要max.in.flight.requests.per.connection
小于或等于5,retries
大于 0 且acks
必须是“全部”。如果用户没有明确设置这些值,则会选择合适的值。如果设置了不兼容的值,将抛出 ConfigException。"
请记住,重试的默认值无论如何都是2147483647
(我认为的意思是infinite)。请随意将此值设置为较小的数字,但仍大于 0。
关于幂等 KafkaProducer 的排序保证,即使有多个正在进行的请求,我已经写了一篇答案here https://stackoverflow.com/questions/49982786/why-is-there-inconsistency-in-kafkas-ordering-guarantees-when-using-idempotent.
“如果我不将幂等性用于交易,我真的需要幂等性吗?”
我无法告诉您的要求是什么,但在生产者端启用幂等性可确保不会因代理或生产者故障而创建重复项。
请记住,Kafka 中的事务有两个方面,不仅是生产者,还包括消费者。如果您使用交易,您还想查看您的消费者配置isolation.level
.