【发布时间】:2018-07-30 09:00:34
【问题描述】:
我正在研究 Kafka 中的 Transactions,我想了解所有细节。
我注意到在 Spring-Kafka 中,当您提供 transactionalId 时启用幂等。
public void setTransactionIdPrefix(String transactionIdPrefix) {
Assert.notNull(transactionIdPrefix, "'transactionIdPrefix' cannot be null");
this.transactionIdPrefix = transactionIdPrefix;
enableIdempotentBehaviour();
}
乍一看,我假设 Spring-Kafka 在事务中启用了幂等性,因为它是“物有所值”的。我认为这是为了确保事务中的语义精确一次。
我做了更多的挖掘,发现事务需要幂等才能工作。 KIP-98中提到了这一点
请注意,如果 TransactionalId 是,则必须启用 enable.idempotence 配置好了。
Kafka 幂等是一种避免重复消息的功能,例如消息发送后的网络错误。
我的理解是,Kafka 事务基本上写入一个内部主题,必须启用幂等以避免重复。
幂等性为生产者启用了一次性语义。
事务为传递性启用了一次性语义;消费 -> 生产。
我的理解正确吗?
什么东西只对消费者启用了exactly-once?提交偏移、幂等或事务。
【问题讨论】: