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 卡夫卡独立消费者_Apache Kafka_Kafka Consumer Api_Kafka Producer Api - Fatal编程技术网

Apache kafka 卡夫卡独立消费者

Apache kafka 卡夫卡独立消费者,apache-kafka,kafka-consumer-api,kafka-producer-api,Apache Kafka,Kafka Consumer Api,Kafka Producer Api,我是卡夫卡的新手,试图验证我的设计。下面是我所拥有的 我有一个制作人发布一个主题,并有一堆容器(部署我的web应用程序的地方),其中消费者在每个容器上运行。这些消费者不在消费者组中,并且独立地消费消息。每个消费者都应该阅读该主题中的所有消息。 e、 g.假设主题上有3条消息-m0、m1、m2,那么consumer1到consumerN应该分别读取m0、m1、m2。 每个使用者在处理读取的消息时都会提交偏移量。每当重新部署web应用程序时,所有使用者都会停机并重新启动。它们应该从最后提交的偏移量开

我是卡夫卡的新手,试图验证我的设计。下面是我所拥有的

我有一个制作人发布一个主题,并有一堆容器(部署我的web应用程序的地方),其中消费者在每个容器上运行。这些消费者不在消费者组中,并且独立地消费消息。每个消费者都应该阅读该主题中的所有消息。 e、 g.假设主题上有3条消息-m0、m1、m2,那么consumer1到consumerN应该分别读取m0、m1、m2。 每个使用者在处理读取的消息时都会提交偏移量。每当重新部署web应用程序时,所有使用者都会停机并重新启动。它们应该从最后提交的偏移量开始读取


对于这种设置,正如我所说,我的所有消费者都不在任何消费者组中,我认为这应该使他们能够独立阅读消息,请确认这是正确的?此设计中有任何缺陷吗?

根据您自己的声明,即每个消费者都应该使用所有消息,您的设计在我看来是合理的。由于Kafka维护每个消费者组/主题/分区的偏移量提交,因此每个消费者都有独立处理和提交偏移量的自由

看看这一点,了解卡夫卡的基本架构

您还可以探索卡夫卡创建的一个名为
\uuuu consumer\u offset
的特殊内部主题,其中存储了每个消费者组id的偏移量


实际上,使用者是否能够读取重新启动后停止的位置也取决于主题的保留期。如果停机时间超过保留期,则可能会出现消息丢失

您的设计只是缺少一件小事,每个容器必须定义不同的(kafka)使用者组,并在重新启动时重新使用它。否则,在每次启动时,将为每个消费者分配一个随机组id,因此他们将不会在关闭时离开的地方接收消费。

您能否确认消费者的日志中有一条关于成功提交偏移量的消息?嗯,我还没有开始实施。在开始实施这种拓扑结构之前,我需要确保我的方向正确。理论上说,是的!它会像你想的那样工作。N个容器的数量将取决于N个用户组,只要他们能够提交上次使用的偏移量,重新启动容器将不会导致数据丢失或重复。这更多的是配置问题,而不是设计问题。它也是特定于客户端的。e、 g.Spring Kafka和Confluent Kafka都要求您指定一个
group.id
。不确定是不是普通的Java消费者,但可能即使在那里也不再是这样了。