我是Kafka的新手,正在尝试验证我的设计。以下是我所拥有的。
我有一个生产者发布一个主题,并且有一堆容器(在其中部署了我的Web应用程序),每个容器上都运行有使用者。这些使用者不在使用者组中并且独立地消费消息。每个使用者都应阅读该主题中的所有消息。 例如假设有3条关于该主题的消息-m0,m1,m2,那么消费者1到消费者N应该分别读取m0,m1,m2。 每个使用者在处理读取的消息后都会立即提交偏移量。每当重新部署我的Web应用程序时,所有使用者都会关闭并重新启动。他们应该从最后提交的偏移量开始读取。
对于此设置,由于我说我的所有消费者都不属于任何消费者组,并且我认为这应该使他们独立阅读消息,请确认是否正确?这种设计有任何缺陷吗?
答案 0 :(得分:1)
your design is just missing a small thing, each of your container must define a different (kafka) consumer group and reuse it at restart. Otherwise a random group id will be assigned to each consumer at each startup and therefore they will not pick up consuming where they left at shutdown.
答案 1 :(得分:0)
根据您自己的说法,即每个消费者都应该使用所有消息,您的设计对我来说听起来不错。由于Kafka维护每个消费者组/主题/分区的偏移量提交,因此您的每个消费者都可以自由地独立处理和提交偏移量。
看看这个link来了解Kafka的基本架构。
您还可以探索由卡夫卡(Kafka)创建的一个特殊内部主题,名为__consumer_offsets
,其中为每个消费者组ID存储偏移量。
在实践中,消费者是否能够在重新启动后阅读从中断处读取的内容,这还取决于主题的保留期限。如果停机时间超出保留期限,则可能会丢失消息