我在rest端点调用中使用了启用了幂等性的kafka producer(没有启用一次语义或事务)。我之所以启用它,是因为我不希望Kafka重试造成任何重复。我关注以下问题:幂等性会减慢我的端点吗(这个端点需要非常快)我读过kafkaapi文档,启用幂等将使重试无限(什么?)如果我不在事务中使用幂等性,我真的需要它吗?
0pizxfdo1#
“具有幂等性会减慢我的端点吗(这个端点需要非常快Kafka允许通过使用内部序列号以幂等方式生成消息。这是在代理端缓存和比较的,因此生成消息要花费更多的时间。此外,尽管您可以有多个正在进行的写请求,但如果一个请求失败,那么随后的几个请求将失败,并出现可重试的outofsequenceexception,这也可能会减慢您的生产者的速度。然而,与具有禁用幂等性的生产者相比,这两个确实是很小的补充,而且我不知道有任何综合的基准来衡量吞吐量或延迟的差异。最好是在您的实际环境中进行测试。“我读过Kafkaapi文档,启用幂等将使重试无限(什么?)”根据对configuration enable.idempotence的描述,它说:“当设置为‘true’时,生产者将确保每个消息在流中只写入一个副本。如果“false”,则由于代理失败等原因导致的生产者重试可能会在流中写入重试消息的副本。注意,启用幂等需要 max.in.flight.requests.per.connection 小于等于5, retries 大于0且 acks 必须是“all”。如果用户未明确设置这些值,则将选择合适的值。如果设置了不兼容的值,将引发configexception。“请记住,重试的默认值是anyway 2147483647 (我认为无限的含义)。请随意将此值设置为较低的数字,但仍大于0。关于幂等kafkaproducer的排序保证,即使有多个飞行中的请求,我已经在这里写了一个答案。“如果我不在事务中使用幂等性,我真的需要它吗?”我不知道您的要求是什么,但是在producer端启用幂等性可以确保不会由于代理或producer失败而创建重复项。记住,Kafka的交易有两个方面,一个是生产者,另一个是消费者。如果您使用事务,您还需要查看您的使用者配置 isolation.level .
max.in.flight.requests.per.connection
retries
acks
2147483647
isolation.level
1条答案
按热度按时间0pizxfdo1#
“具有幂等性会减慢我的端点吗(这个端点需要非常快
Kafka允许通过使用内部序列号以幂等方式生成消息。这是在代理端缓存和比较的,因此生成消息要花费更多的时间。此外,尽管您可以有多个正在进行的写请求,但如果一个请求失败,那么随后的几个请求将失败,并出现可重试的outofsequenceexception,这也可能会减慢您的生产者的速度。
然而,与具有禁用幂等性的生产者相比,这两个确实是很小的补充,而且我不知道有任何综合的基准来衡量吞吐量或延迟的差异。最好是在您的实际环境中进行测试。
“我读过Kafkaapi文档,启用幂等将使重试无限(什么?)”
根据对configuration enable.idempotence的描述,它说:“当设置为‘true’时,生产者将确保每个消息在流中只写入一个副本。如果“false”,则由于代理失败等原因导致的生产者重试可能会在流中写入重试消息的副本。注意,启用幂等需要
max.in.flight.requests.per.connection
小于等于5,retries
大于0且acks
必须是“all”。如果用户未明确设置这些值,则将选择合适的值。如果设置了不兼容的值,将引发configexception。“请记住,重试的默认值是anyway
2147483647
(我认为无限的含义)。请随意将此值设置为较低的数字,但仍大于0。关于幂等kafkaproducer的排序保证,即使有多个飞行中的请求,我已经在这里写了一个答案。
“如果我不在事务中使用幂等性,我真的需要它吗?”
我不知道您的要求是什么,但是在producer端启用幂等性可以确保不会由于代理或producer失败而创建重复项。
记住,Kafka的交易有两个方面,一个是生产者,另一个是消费者。如果您使用事务,您还需要查看您的使用者配置
isolation.level
.