Kafka:高可用性所需的最低代理数量是多少?

ppcbkaq5  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(365)

假设我想让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

Kafka是否会开始制作新的复制品,以防一个代理崩溃,一个复制品随之消失?
在任何情况下,我们是否必须至少拥有default.replication.factor数量的代理才能继续工作?

brgchamk

brgchamk1#

好吧,你可以有相同的复制因子 min.insync.replicas . 但也有一些挑战。
我们知道,在代理中断期间,该代理上存在的所有分区副本都不可用。受影响分区的时间可用性由其其他副本的存在和状态决定。
如果一个分区没有额外的副本,则该分区将完全不可用。但是,如果一个分区有其他同步副本,其中一个同步副本将成为临时分区的领导者。如果分区有额外的副本,但没有同步副本,我们可以做出选择:要么选择等待分区负责人重新联机—牺牲可用性 — 或者允许不同步的复制副本成为临时分区的领导者—牺牲一致性。
因此,在这种情况下,任何分区都需要有一个额外的同步副本,以便在丢失分区前导后继续生存。这意味着min.insync.replicas应至少设置为2。
为了使最小isr大小为2,复制因子也必须至少为2。但是,如果只有2个副本且一个代理不可用,则isr大小将减少到最小值以下1。因此,复制因子最好大于最小isr大小(至少3)。

jfewjypa

jfewjypa2#

为了在kafka中实现高可用性,您需要考虑以下因素:
1复制因子:默认情况下,复制因子设置为 1 . 推荐的 replication-factor 对于生产环境 3 也就是说需要3个经纪人。
2首选领导人选举:当代理被取下时,其中一个副本将成为分区的新领导人。一旦失败的代理再次启动并运行,它就没有前导分区,kafka恢复它在关闭时丢失的信息,它再次成为分区前导。默认情况下启用首选领导人选举。为了最大限度地降低切换回首选领导时丢失消息的风险,您需要设置producer属性 acksall (显然这是以性能为代价的)。
三。不干净的领导者选举:您可以启用不干净的领导者选举,以允许不同步副本成为领导者并保持分区的高可用性。对于不干净的领导人选举,没有同步到新领导人的消息将丢失。一致性和高可用性之间存在一种权衡,这意味着在禁用不干净的前导选举的情况下,如果包含某个分区的前导副本的代理变得不可用,并且不存在可替换它的同步副本,则在前导副本或另一个同步副本重新联机之前,该分区将变得不可用。
4确认:确认是指在使用确认消息之前提交新消息的副本数 acks 财产。当acks设置为 0 消息将立即得到确认,而无需等待其他代理提交。当设置为 1 ,则消息在领导者提交消息后得到确认。配置 acksall 提供最高的一致性保证,但对群集的写入速度较慢。
5最小同步副本数: min.insync.replicas 定义必须为生产者提供的同步复制副本的最小数量,以便将消息成功发送到分区。如果 min.insync.replicas 设置为 2 以及 acks 设置为 all ,每个消息必须成功写入至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。

相关问题