在生产者/消费者客户端中绕过Zookeeper?

时间:2017-04-26 18:19:34

标签: apache-kafka apache-zookeeper kafka-consumer-api kafka-producer-api

这是earlier discussion的后续问题。我认为Zookeeper是Kafka经纪人或"消息总线"的实例的协调者。我理解为什么我们可能希望生产者/消费者客户通过Zookeeper进行交易 - 因为Zookeeper具有内置的容错功能,以确定与之交易的Kafka经纪人。但是对于新模型 - 即0.10.1+ - 我们是否应该始终在生产者/消费者客户端中完全绕过Zookeeper?这样做我们是否放弃了任何优势(例如,更好的容错性)?或者Zookeeper最终还是在幕后工作?

2 个答案:

答案 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中。