首页 > 解决方案 > Kafka:高可用性所需的最少代理数量是多少?

问题描述

假设我想在小型部署的生产环境中拥有高可用性的 Kafka。我必须使用以下配置

min.insync.replicas=2 // Don't want to lose messages in case of 1 broker crash    
default.replication.factor=3 // Will let producer write in case of 1 replica disappear with broker crash

如果 1 个代理崩溃并且 1 个副本随之消失,Kafka 会开始制作新的副本吗?

在任何情况下,我们是否必须至少拥有default.replication.factor数量的代理才能继续工作?

标签: apache-kafkahigh-availabilitykafka-cluster

解决方案


为了在 Kafka 中启用高可用性,您需要考虑以下因素:

1. 复制因子:默认情况下,复制因子设置为1。推荐replication-factor用于生产环境,3这意味着需要3 个代理

2. Preferred Leader Election:当一个broker被关闭时,其中一个副本成为分区的新leader。一旦发生故障的代理重新启动并运行,它就没有领导分区,Kafka 会恢复它在关闭时丢失的信息,并再次成为分区领导。默认情况下启用首选领导者选举。为了将切换回首选领导者时丢失消息的风险降到最低,您需要将生产者属性设置acksall(显然这是以性能为代价的)。

3. Unclean Leader Election:您可以启用不干净的Leader Election,以允许不同步的副本成为Leader并保持分区的高可用性。使用不干净的领导者选举,未同步到新领导者的消息会丢失。在一致性和高可用性之间进行权衡,这意味着在禁用不干净的领导者选举的情况下,如果包含分区领导者副本的代理不可用,并且不存在同步副本来替换它,则该分区将不可用,直到领导者副本或另一个同步副本重新联机。

4. 确认acks:确认是指在使用属性确认消息之前提交新消息的副本数。当 acks 设置为0消息时立即确认,而无需等待其他代理提交。当设置为 时1,一旦领导者提交消息,消息就会被确认。配置acksall提供最高的一致性保证,但对集群的写入速度较慢。

5. 最小同步副本数:min.insync.replicas定义了生产者必须可用的最小同步副本数,以便成功地将消息发送到分区min.insync.replicas。如果设置为2acks设置为all,则必须成功写入每条消息到至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,则该分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。


推荐阅读