1

据我了解,生产者不得重试任何发送失败,消费者必须在执行某些处理之前提交以提供最多一次交付语义。但是复制因子是否也与交付语义相关联?reactor-kafka 中示例项目中的注释如下所示:

复制因子为 1 的主题与 acks=0 且不重试的生产者相结合,可确保删除第一次尝试时无法发送到 Kafka 的消息

复制因子应该是一个在 Apache Kafka 中提供最多一次交付语义的因素吗?

4

1 回答 1

1

我认为最多一次的概念主要与消费者相关,与复制因子无关。相反,从生产者的角度来看,我认为这句话是正确的,因为生产者不等待确认并且只存在一个副本(不可能进行故障转移)。

如果你在你的消费者上禁用自动提交,并在你得到它并且在处理之前调用 commitSync 来确认消息(提交偏移量),那么你正在执行最多一次传递语义。此时,如果消费者由于某种异常无法处理消息,则消息丢失。好吧,它仍然存储在 Kafka 中,但是消费者已经移过了消息的偏移量,并且如果没有手动重置偏移量就无法恢复它。

于 2021-01-21T13:28:08.350 回答