假设我想在小型部署的生产环境中拥有高度可用的 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 个 broker 崩溃并且 1 个副本消失,Kafka 会开始制作新副本吗?
在任何情况下,我们是否必须至少有 default.replication.factor 数量的经纪人才能继续工作?
最佳答案
为了在 Kafka 中实现高可用性,您需要考虑以下因素:
1.复制因子 :默认情况下,复制因子设置为 1
.推荐replication-factor
生产环境是 3
这意味着 需要3个经纪人 .
2. 首选领导人选举 :当一个代理被关闭时,其中一个副本成为分区的新领导者。一旦失败的broker重新启动并运行,它就没有leader分区,Kafka恢复它在宕机时丢失的信息,它再次成为分区leader。默认情况下启用首选领导者选举。为了将切换回首选领导时丢失消息的风险降至最低,您需要设置生产者属性 acks
至 all
(显然,这是以性能为代价的)。
3.不洁领袖选举 :
您可以启用不干净的领导者选举,以允许不同步的副本成为领导者并保持分区的高可用性。对于不干净的领导者选举,未同步到新领导者的消息将丢失。一致性和高可用性之间存在权衡,这意味着在禁用不洁领导者选举的情况下,如果包含分区领导者副本的代理变得不可用,并且不存在同步副本来替换它,则该分区将不可用,直到领导者出现副本或另一个同步副本重新联机。
4. 致谢 :
确认是指在使用 acks
确认消息之前提交新消息的副本数。属性(property)。当 acks 设置为 0
该消息会立即得到确认,而无需等待其他代理提交。设置为 1
时,一旦领导者提交消息,消息就会被确认。配置 acks
至 all
提供最高的一致性保证,但对集群的写入速度较慢。
5. 最小同步副本 :min.insync.replicas
定义生产者必须可用的最小同步副本数才能成功地将消息发送到分区。如果 min.insync.replicas
设置为 2
和 acks
设置为 all
,每条消息必须成功写入至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,则该分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。
关于apache-kafka - 卡夫卡 : What is the minimum number of brokers required for high availability?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53208811/