为什么消费者连接到zookeeper来检索分区位置?kafka制作者必须连接到其中一个代理来检索元数据。
我的观点是,当每个经纪人都已经有了所有必要的元数据来告诉生产者发送信息的位置时,动物园管理员到底有什么用?经纪人不能把同样的信息发送给消费者吗?
我可以理解为什么经纪人拥有元数据,而不必在每次向他们发送新消息时都与动物园管理员建立连接。动物园管理员有什么功能是我错过的吗?我发现很难想到为什么在Kafka集群中真正需要动物园管理员的原因。
你是对的,自从kafka 0.9发布以来,消费者不需要连接到ZooKeeper。他们重新设计了api,并引入了新的消费者客户端:
0.9版本为新设计的消费者客户端引入了beta版支持。从高层次上讲,新消费者的主要区别在于,它消除了基于ZooKeeper的“高级”消费者和“低级”SimpleConsumer API之间的区别,而是提供了统一的消费者API。
和
最后,这完成了过去几年中完成的一系列项目,以将Kafka客户机与Zookeeper完全分离,从而完全消除消费者客户机对Zookeeper的依赖。
kafka 0.9引入了新的消费者API。新消费者不需要连接到Zookeeper,因为组平衡是由kafka本身提供的。
首先,zookeeper只有高层次的消费者才需要。< code>SimpleConsumer不要求zookeeper工作。
高级消费者需要动物园管理员的主要原因是跟踪消耗的偏移量并处理负载平衡。
现在更详细地说。
关于偏移量跟踪,想象以下场景:您启动一个消费者,消费100条消息,然后关闭消费者。下次启动消费程序时,您可能希望从上次消费的偏移量(100)开始恢复,这意味着您必须在某个地方存储最大消费偏移量。这就是zookeeper发挥作用的地方:它存储每个组/主题/分区的偏移量。这样,下次你启动你的消费程序时,它可能会问“嘿,动物园管理员,我应该从什么偏移量开始消费?”。Kafka实际上正在朝着不仅能够在zookeeper中存储偏移,而且能够在其他存储中存储偏移的方向发展(目前只有< code>zookeeper和< code>kafka偏移存储可用,我不确定< code>kafka存储是否完全实现)。
关于负载平衡,由一台机器处理产生的消息量可能相当大,您可能希望在某个时候增加计算能力。假设您有一个包含100个分区的主题,而要处理这么多消息,您需要10台机器。实际上,这里出现了几个问题:
再说一遍,这里是动物园管理员的工作:它跟踪组中的所有消费者,每个高级别消费者都订阅了该组中的更改。关键是,当消费者出现或消失时,动物园管理员会通知所有消费者并触发重新平衡,以便他们几乎均等地分割分区(例如,平衡负载)。这样,它可以保证如果一个使用者死亡,其他使用者将继续处理该使用者拥有的分区。
注意:这将只显示有关使用Java消费者API的消费者(非基于ZooKeeper的消费者)的信息。 此工具还适用于基于ZooKeeper的使用者: bin/kafka-consumer-groups.sh--zookeeper localhost:2181--description--group my-group null PS:这似乎没有出现在2.5文档中
我是Kafka的新手,动物园管理员和Storm。我我们的环境,我们有一个Kafka代理连接到多个动物园管理员。让生产者将消息发送到特定主题并在一个代理上将分区到多个动物园管理员与多个代理分配给多个动物园管理员相比是否有优势?
我有一组Kafka代理实例作为集群运行。我有一个客户正在生产数据给Kafka: 当我们使用tcpdump进行监控时,我可以看到只有到broker1和broker2的连接被建立,而对于broker3,没有来自我的生产者的连接。我有一个只有一个分区的单一主题。 我的问题是: > 为什么在我的情况下,我无法连接到broker3?或者至少我的网络监控没有显示我的制作人与broker3建立了连接? 如果我能
我在这里指的是一篇帖子:在ApacheKafka多节点集群中连接Zookeeper 这里提到,从KafkaV9版开始,制作人和消费者不必使用zookeeper。连接属性和引导。服务器足以生成/使用数据。 我的POM。xml在消费者端看起来是这样的: 在没有zookeeper的情况下,我在消费者方面遇到了以下问题。连接属性。有人在没有zookeeper connect属性的情况下让消费者部分工作吗?
有没有其他方法可以得到认可? 我使用kafka-client api 0.9.1和broker版本0.8.2。
我正在做一个Kafka的消费者计划。最近我们在PROD环境下进行了部署。在那里,我们面临以下问题: 我的理解是,当组协调器不可用并被重新发现时,心跳间隔(根据文档为3秒)过期,消费者被踢出组。这是正确的吗?。如果是这样的话,应该为这个工作做些什么呢?。如果我错了,请帮助我理解这个问题,并建议您有任何想法,以解决这个问题。如果需要,我可以分享代码。