gpt4 book ai didi

apache-kafka - 幂等和事务

转载 作者:行者123 更新时间:2023-12-04 01:53:59 27 4
gpt4 key购买 nike

我正在探索 Kafka 中的事务,我想了解所有细节。

我注意到在 Spring-Kafka 中,当您提供 transactionsalId 时,会启用幂等。

public void setTransactionIdPrefix(String transactionIdPrefix) {
Assert.notNull(transactionIdPrefix, "'transactionIdPrefix' cannot be null");
this.transactionIdPrefix = transactionIdPrefix;
enableIdempotentBehaviour();
}

乍一看,我认为 Spring-Kafka 在事务中启用了幂等性,因为它是“可有可无”的。我认为这是为了确保交易中的精确一次语义。

我做了更多的挖掘,发现事务工作需要幂等性。 KIP-98 中提到了这一点

Note that enable.idempotence must be enabled if a TransactionalId is configured.

Kafka幂等性是为了避免重复消息的特性,比如消息发送后出现网络错误。

我的理解是,Kafka 事务基本上写入内部主题,必须启用幂等以避免重复。

幂等性为生产者启用了 exactly-once 语义。

事务为传递性启用了恰好一次的语义;消费 -> 生产。

我的理解正确吗?

是什么让 exactly-once 只对消费者有效?提交抵消、幂等或事务。

最佳答案

幂等生产者针对单个主题为生产者启用一次。基本上每条消息发送都有更强的保证,并且在出现错误时不会重复。

另一方面,Transactional producer 可以将多个发送(可以跨多个分区)组合在一起并应用所有(或不应用)。事务还可以包含偏移量提交(最后提交偏移量与写入主题相同)。

因为消费者从 Kafka 获取数据,所以它已经恰好一次了。当消费者从偏移量 N 向 Kafka 请求消息时,如果它没有收到它们,它只会重试,不能有任何重复。消费者唯一需要一次的是提交偏移量,这可以由事务生产者完成(消费者需要将其当前偏移量传递给生产者)。

关于apache-kafka - 幂等和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com