Kafka可以容忍N-1失败吗?

时间:2016-01-29 16:04:02

标签: apache-kafka apache-zookeeper

我正在阅读Kafka的文档,它在这里说:

  

对于复制因子为N的主题,我们最多可以容忍N-1   服务器故障,不会丢失任何提交给日志的消息。

http://kafka.apache.org/documentation.html#introduction(它在1.2用例之上)

这怎么可能?根据我的理解,引擎盖下的主题使用ZooKeeper,它使用Zab(类似Paxos的算法)。我无法从此页面找到有关Zab的任何文档:

https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos

有人可以向我解释他们如何支持N-1失败。 Nn 1 N-1字面上只是机器本身的所有东西吗?

此外,如果有人知道任何阅读的好地方或Zab的视频,请告诉我。

除此之外http://web.stanford.edu/class/cs347/reading/zab.pdf,因为我希望更轻松。

由于

1 个答案:

答案 0 :(得分:3)

我可以帮助您回答问题的Kafka / Zookeeper部分。我认为你很困惑Kafka和Zookeeper如何一起工作。

我认为考虑Kafka和Zookeeper独立运作可能会更好,但需要两者共同完成工作。 Kafka和Zookeeper都可以自行失败。

  • Zookeeper合奏可能会失败,导致Kafka停止工作,但这只是因为Zookeeper失败了,而不是因为Kafka群集有问题。
  • Kafka群集可能会失败,Zookeeper仍然会工作。但是,由于卡夫卡整个系统整体不起作用。

Kafka和Zookeeper对于失败的原因都有不同的规则。

  • 只要大多数Zookeeper服务器正在运行,Zookeeper集合将继续工作。因此,如果您有7个Zookeeper服务器,它可以在Zookeeper集合停止工作之前处理多达3个故障。 [reference]
  • Kafka对其运作方式有不同的资格。只要一台Kafka机器保持活着,卡夫卡就会继续运作,就像你引用的N-1数字一样。

我对Zookeeper,Zab(类似Paxos算法)中使用的算法一无所知,但根据我的理解,这就是Kafka和Zookeeper一起工作的方式。