这是earlier discussion的后续问题。我认为Zookeeper是Kafka经纪人或"消息总线"的实例的协调者。我理解为什么我们可能希望生产者/消费者客户通过Zookeeper进行交易 - 因为Zookeeper具有内置的容错功能,以确定与之交易的Kafka经纪人。但是对于新模型 - 即0.10.1+ - 我们是否应该始终在生产者/消费者客户端中完全绕过Zookeeper?这样做我们是否放弃了任何优势(例如,更好的容错性)?或者Zookeeper最终还是在幕后工作?
答案 0 :(得分:3)
为了补充Hans Jespersen的答案,最近的Kafka生产者/消费者客户(0.9+)不再与ZooKeeper互动。
如今,ZooKeeper仅供Kafka经纪人(即Kafka的服务器端)使用。这意味着您可以例如锁定从客户端到所有ZooKeeper实例的外部访问,以提高安全性。
我理解为什么我们可能希望生产者/消费者客户通过Zookeeper进行交易 - 因为Zookeeper具有内置的容错功能,以确定与哪个Kafka经纪人进行交易。
生产者/消费者客户不是通过ZooKeeper“进行交易”,见上文。
但是对于新模型 - 即0.10.1+ - 我们是否应该始终在生产者/消费者客户端中完全绕过Zookeeper?
如果您的问题的动机是因为您想要实现自己的Kafka生产者或消费者客户端,那么答案是:您的自定义客户端不应再使用ZooKeeper。官方Kafka生产者/消费者客户(Java / Scala)或例如Confluent's C/C++, Python, or Go clients for Kafka演示了如何通过利用Kafka功能(而不是依赖于像ZooKeeper这样的单独服务)来实现可伸缩性,容错性等。
我们是否通过这样做放弃了任何优势(例如,更好的容错性)?或者Zookeeper最终还是在幕后工作?
不,我们不会放弃任何优势。否则,Kafka项目不会改变其生产者/消费者客户端以停止使用ZooKeeper并开始使用Kafka自己的内部工作。
ZooKeeper仅在Kafka 经纪人的幕后工作,见上文。
答案 1 :(得分:2)
Zookeeper仍然在幕后工作,但0.9+客户不再需要担心它,因为消费者偏移现在存储在Kafka主题中,而不是存储在zookeeper中。