幂等与交易

时间:2018-07-30 09:00:34

标签: apache-kafka spring-kafka

我正在卡夫卡(Kafka)探索交易,我想了解所有详细信息。

我在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事务基本上是写一个内部主题,必须启用幂等才能避免重复。

幂等对生产者启用一次语义。

Transactions为传递性启用了一次精确的语义;消费->生产。

我的理解正确吗?

是什么让一次消费者仅能一次?提交偏移量,幂等或事务。

1 个答案:

答案 0 :(得分:3)

幂等生产者可以针对单个主题为生产者启用一次。基本上,每条发送的邮件都有gerger保证,在出现错误的情况下不会重复。

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

由于消费者从Kafka提取数据,因此已经只有一次。当消费者从偏移量N询问Kafka消息时,如果它没有接收到消息,它将重试,没有任何重复。 COnsumers唯一需要的一次就是提交偏移量,这可以由交易生产者完成(消费者需要将其当前的偏移量传递给生产者)。