KafKa如何保证一致性和可用性?

时间:2015-04-24 13:14:47

标签: distributed-computing apache-kafka distributed-system

我从http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka

学习
  

我们的目标是支持在单个数据中心内的Kafka群集中进行复制,其中网络分区很少

在分布式系统中,我认为"分区"是基本的,所以我不知道当只有服务器节点失败时,Kafka保证没有分区的可用性。或者我想念一些东西

1 个答案:

答案 0 :(得分:8)

我认为你可能会混淆分享"分区"与网络分区。

Kafka确实提供了分片和复制。 Kafka为每个主题的每个分区选择一个独特的领导者。主题分区的所有写入都通过领导者。这与您引用的文档相关,表明Kafka更有利于分区容错的可用性。

网络分区的含义是服务器之间的通信中断。网络通信故障在LAN中比在WAN中更少见,因此Kafka的架构旨在提供一致性,除非发生网络分区。在网络分区的情况下,Kafka的副本可能彼此分离,分区两侧的节点可能接受写入。可能发生这种情况的原因是,当网络分区发生时,分区每侧的节点可以感知到分区另一侧的节点已经失败,而实际上它们之间的链路只是失败。这意味着网络分区的每一侧可以为某些主题分区选择新的领导者,因此意味着网络分区的每一侧都可以接受某些主题分区的写入。一旦网络分区恢复(网络固定),在分区一侧进行的写操作可能会覆盖在分区另一端进行的写操作。