Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka正在分配分区,是否需要提交偏移量_Apache Kafka - Fatal编程技术网

Apache kafka Kafka正在分配分区,是否需要提交偏移量

Apache kafka Kafka正在分配分区,是否需要提交偏移量,apache-kafka,Apache Kafka,拥有一个在多个实例中运行的应用程序,并且每个实例需要使用来自主题所有分区的所有消息 我知道有两种策略: 为每个应用实例创建一个唯一的消费者组id,并像往常一样订阅和提交, 缺点是卡夫卡仍然需要代表每个消费者维持一个消费群体 向kafka询问主题的所有分区,并将使用者分配给所有这些分区。据我所知,卡夫卡不再有任何代表消费者创建的消费者团体。因此,问题是是否仍然需要提交补偿,因为卡夫卡一方没有消费者群体能够跟上时代的步伐。创建使用者时未为其分配“group.id” 将始终存在消费者组设置。如果您没有

拥有一个在多个实例中运行的应用程序,并且每个实例需要使用来自主题所有分区的所有消息

我知道有两种策略:

为每个应用实例创建一个唯一的消费者组id,并像往常一样订阅和提交, 缺点是卡夫卡仍然需要代表每个消费者维持一个消费群体

向kafka询问主题的所有分区,并将使用者分配给所有这些分区。据我所知,卡夫卡不再有任何代表消费者创建的消费者团体。因此,问题是是否仍然需要提交补偿,因为卡夫卡一方没有消费者群体能够跟上时代的步伐。创建使用者时未为其分配“group.id”


将始终存在消费者组设置。如果您没有设置它,那么您运行的任何消费者都将使用其默认设置,或者Kafka将指定一个

卡夫卡将跟踪使用该消费群体的所有消费者的抵消情况

仍然需要提交偏移量。如果没有提交补偿,卡夫卡将不知道已经读到了什么

以下是查看所有消费者组及其延迟的命令:

bin/kafka-consumer-groups.sh-引导服务器localhost:9092-描述-所有组 向kafka询问主题的所有分区,并将使用者分配到 所有这些。据我所知,不再有任何消费群体 代表卡夫卡中的消费者创建。所以问题是如果 由于没有消费者,仍然需要提交补偿 卡夫卡一方的团队保持最新。消费者是被创造出来的 没有为其分配“group.id”

调用consumer.assign而不是consumer.subscribe时,不需要group.id属性,这意味着不需要任何组,也不需要Kafka维护任何组

提交偏移量基本上是跟踪已处理的内容,以便不再处理它们。这也可以手动完成。例如,在处理消息之后,读取轮询消息并将偏移量写入文件一次

在这种情况下,您的程序负责写入偏移量,并在重新启动时使用consumer.seek读取下一个偏移量

唯一的缺点是,如果要将消费者从一台机器移动到另一台机器,则还需要复制此文件

您还可以将它们存储在任何计算机都可以访问的数据库中,以防您不希望复制该文件,尽管写入文件可能相对更简单、更快


另一方面,如果存在消费者组,只要你的消费者有权访问卡夫卡,你的卡夫卡就会让你的消费者自动读取上次提交的偏移量。

因此,基本上与具有唯一随机组id的订阅没有什么区别。如果分配时每个应用实例都创建了唯一的group.id,或者他们应该使用相同的方法。我们试图理解assign koncept并阅读《卡夫卡最终指南》和“独立消费者:为什么以及如何使用没有组的消费者”一节,以跟踪单独的偏移量。例如,如果我有两个应用程序,并且我希望每个应用程序都获得数据的完整副本,那么我将拥有唯一的消费者群体。如果我有两份申请,并且我想要发送一份数据副本,我会使用一个消费者群体。嗨,拉尔斯,如果你的问题得到了回答,请接受这个答案