作者:杯中水1129_909 | 来源:互联网 | 2022-12-10 14:18
Kafka的主要开发人员表示Kafka是CA而CAP是CAP定理.但我很困惑,卡夫卡不是分区容忍的吗?我认为确实如此,当一个复制失败时,另一个将成为领导者并继续工作!
另外,我想知道如果Kafka使用P怎么办?P会伤害C还是A?
1> Giorgos Myri..:
CAP定理指出,任何分布式系统最多可以提供三种保证中的两种:一致性,可用性和分区容差.
根据LinkedIn的工程师(Kafka最初成立的地方),Kafka是一个CA系统:
所有分布式系统必须在保证一致性,可用性和分区容差(CAP定理)之间进行权衡.我们的目标是支持在单个数据中心内的Kafka群集中进行复制,其中网络分区很少,因此我们的设计侧重于维护高可用性和高度一致性的副本.强一致性意味着所有副本都是字节到字节相同的,这简化了应用程序开发人员的工作.
但是,我会说这取决于您的配置,更准确地说取决于变量acks
,min.insync.replicas
以及replication.factor
.根据文件,
如果主题仅配置了两个副本且一个失败(即,同步副本中只有一个仍然存在),则指定acks = all的写入将成功.但是,如果剩余的副本也失败,则这些写入可能会丢失.虽然这确保了分区的最大可用性,但对于喜欢耐用性而非可用性的一些用户来说,这种行为可能是不合需 因此,我们提供了两种主题级配置,可用于优先考虑消息的持久性和可用性:
禁用不洁的领导者选举 - 如果所有副本都不可用,则分区将保持不可用,直到最近的领导者再次可用.这有效地优先于消息丢失风险的不可用性.请参阅上一节关于不洁领导人选举的部分以获得澄清.
指定最小ISR大小 - 如果ISR的大小高于某个最小值,则分区将仅接受写入,以防止丢失仅写入单个副本的消息,该副本随后变为不可用.此设置仅在生产者使用acks = all时生效,并保证至少通过此许多同步副本确认消息.此设置提供了一致性和可用性之间的权衡.最小ISR大小的更高设置保证了更好的一致性,因为保证将消息写入更多副本,这降低了它将丢失的可能性.但是,它会降低可用性,因为如果同步副本的数量低于最小阈值,则分区将无法进行写入.
阅读这篇文章-https://aphyr.com/posts/293-jepsen-kafka。它出色地解释了分区容限!