我对使用Kafka和动物园管理员时偏移量的存储位置有点困惑。在某些情况下,偏移量似乎存储在动物园管理员中,而在其他情况下,它们存储在Kafka中。
什么决定了偏移量是存储在Kafka中还是存储在Zookeeper中?有哪些利弊?
注意:当然,我也可以将偏移量存储在不同的数据存储中,但这不是这篇文章的内容。
有关我的设置的更多详细信息:
Kafka中的偏移量作为消息存储在一个名为“__consumer_offsets”的单独主题中。在最新版本的kafka中,每个消费者定期向主题中提交一条消息。
这完全取决于你使用的是哪种消费者。你应该根据你的Kafka版本来选择合适的消费者。
对于版本0.8
的代理,请使用HighLevelConsumer
。团队的偏移量存储在动物园管理员中。
对于代理< code>0.9和更高版本,您应该使用新的< code>ConsumerGroup。补偿储存在Kafka经纪人那里。
请记住,< code>HighLevelConsumer仍可用于0.8以上的版本,但在< code>0.10.1中已被弃用,支持可能很快就会消失。< code>ConsumerGroup具有滚动迁移选项,有助于从< code>HighLevelConsumer迁移,前提是您必须使用它。
旧版本的Kafka(0.9之前的版本)仅将偏移量存储在ZK中,而新版本的Kafka默认将偏移量存储在名为__consumer_offsets
的内部Kafka主题中(新版本可能仍会提交到ZK)。
向代理提交补偿的优点是,消费者不依赖ZK,因此客户只需要与代理对话,从而简化了总体架构。此外,对于拥有大量使用者的大型部署,ZK可能成为瓶颈,而Kafka可以轻松处理此负载(提交偏移量与写入主题是一样的,并且Kafka在这里可以很好地扩展——事实上,默认情况下,__consumer_offsets
是用50个分区IIRC创建的)。
我不熟悉NodeJS或kafka-node——它取决于客户端实现如何提交偏移。
长话短说:如果您使用代理0.10.1.0
,您可以将偏移量提交给主题__consumer_offsets
。但如果它实现了该协议,则取决于您的客户机。
更详细地说,这取决于您的代理和客户端版本(以及您使用的消费者API),因为旧的客户端可以与新的代理对话。首先,您需要有代理和客户端版本< code>0.9或更高版本,以便能够将偏移量写入Kafka主题。但是,如果一个较旧的客户端连接到一个< code>0.9代理,它仍然会向ZK提交偏移量。
对于 Java 使用者:
这取决于消费者正在使用什么:在0.9之前,有两个“老消费者”,即“高级消费者”和“低水平消费者”。两者都直接将偏移量提交到 ZK。从0.9
开始,两个消费者都合并为单一消费者,称为“新消费者”(它基本上统一了两个老消费者的低级和高级API——这意味着,在0.9
中有三种类型的消费者)。新消费者提交到代理的偏移量(即内部 Kafka 主题)
为了使升级更容易,还可以使用旧消费者(从0.9开始)“双重提交”偏移量。如果您通过
dual.commit.enabled
启用此功能,偏移量将提交到ZK和__consumer_offsets
主题。这允许您从旧消费者API切换到新消费者API,同时将偏移量从ZK移动到__consumer_offsets
主题。
分布式 Apache HBase 安装依赖于正在运行的 ZooKeeper 集群。所有参与节点和客户端都需要能够访问正在运行的 ZooKeeper 集合。 Apache HBase 默认为您管理 ZooKeeper“集群”。它将启动和停止 ZooKeeper 集合作为 HBase 启动/停止过程的一部分。您还可以独立于 HBase 管理 ZooKeeper 集合,只需将 HBase 指向它应该使用
假设我有 3 台 Kafka 服务器。服务器 1 zoopkeeper1 服务器 2 zoopkeeper2 服务器 3 zoopkeeper3 在集群配置中,zoopkeepers 会发生什么?它们是为每个服务器单独维护的,还是会在群集配置中同步其数据?
在Zookeeper和代理身份验证上启用SASL时,我面临以下错误。 以下配置在JAAS文件中给出,该文件作为KAFKA_OPTS传递,将其作为JVM参数:- Kafka经纪人的服务器。属性设置了以下额外字段:- Zookeeper属性如下所示:
我们在单独的服务器上运行 zookeeper 3.3 和 kafka 0.8。我们正在使用 HL 消费者,它们按预期访问 kafka 队列中的数据,重新启动时,他们会从上次中断的地方继续。因此,消费者的行为符合预期。问题是当我们使用 zkCli.sh 时,我们无法看到动物园管理员中的偏移量。目前,消费者设置为仅在一个分区中为主题运行。CMD “ls /consumer/mygrpid/offset
如果我部署war,我将得到以下异常: 原因:org.apache.camel.resolveEndpointFailedException:无法解析endpoint:kafka://localhost:9092?serializerClass=kafka.serializer.stringencoder&topic=checking&zookeePerhost=localhost&zookeePe
我正在尝试安装Kafka Kafka和Zookeeper正在运行Apache Kafka tarball(v 0 . 0 . 9 ),在Docker映像中。 尝试使用提供的脚本消费/生产。并尝试使用自己的java应用程序进行生产。如果Kafka一切正常 以下是我在尝试生成时遇到的错误: Kafka属性测试 首先: 第二: 第三: 上一个: 这是我的“/etc/hosts” 我遵循了入门指南,如果我