[英]Can producers write to Kafka topic during recovery?
当其中一个副本发生故障并将该副本中的分区重新分配给其他代理时,卡夫卡生产者会怎么办? 他们会开始失败吗? 还是这个故障转移过程完全透明?
只要可以在可配置的时间段内为出现故障的分区领导者分配新领导者,该过程就是透明的。
分配给领导者位于代理失败的分区的消息在生产者中排队等待request.timeout.ms。 如果在这段时间内分配了新的领导者,这是正常的情况(当您有多个代理并且RF> 1时),那么所有排队的消息都将发送到新的领导者。 如果在那之后不能为失败的分区分配新的领导者,那么生产者将抛出org.apache.kafka.common.errors.TimeoutException:Batch Expired。
生产者在有新的领导者可用之前填充发送缓冲区(具有可配置大小的buffer.memory)也可能发生。 在这种情况下,生产者将为max.block.ms进行阻塞,此后还将抛出TimeoutException。
这取决于你的制作人确认( acks
)和retries
配置,以及代理端min.insync.replicas
配置和主题replication-factor
。
如果您具有适当的配置和适当的群集大小,则大多数情况下, 一个副本故障转移是透明的。 例如,acks = 1并重试2或3次,并且min.insync.replicas小于主题复制因子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.