生产者可以在恢复过程中写入Kafka主题吗?

时间:2016-08-10 05:10:22

标签: apache-kafka

当其中一个副本失败并且该副本的分区被重新分配给其他代理时,Kafka生产商会发生什么?他们会开始失败吗?或者这个故障转移过程完全透明?

2 个答案:

答案 0 :(得分:1)

只要在可配置的时间段内为失败的分区领导者分配新的领导者,该流程就是透明的。

分配给其领导者位于失败的代理中的分区的消息在生产者中排队,用于request.timeout.ms。如果在此时间内分配了新的领导者,这是正常情况下您拥有多个经纪人和RF> 1,然后所有排队的消息将被发送给新的领导者。如果在此之后无法分配失败分区的新领导者,则生产者将抛出org.apache.kafka.common.errors.TimeoutException:Batch Expired。

在新的领导者可用之前,生产者也可能会填充发送缓冲区(具有可配置的大小buffer.memory)。在这种情况下,生产者将阻止max.block.ms,之后也将抛出TimeoutException。

答案 1 :(得分:0)

这取决于您的制作人确认(acks)和retries配置,以及代理端min.insync.replicas配置和主题replication-factor

如果您拥有正确的配置和不错的群集大小,一个副本故障转移在大多数情况下都是透明的。 例如,acks = 1并重试2或3次,min.insync.replicas小于主题复制因子。