消费者接收消息时,为什么Kafka主题队列没有变空?

时间:2020-10-11 17:18:47

标签: apache-kafka

我正在学习卡夫卡,如果有人可以帮助我理解一件事。 “生产者向Kafka主题发送消息。它停留了一段时间(默认为7天,对吗?)。

但是“消费者”会收到这样的消息,因此永远保持该消息没有太大意义。 我希望这些消息在消费者得到时消失。 否则,当我再次连接到Kafka时,我将再次下载相同的消息。所以我必须避免重复。

其背后的逻辑是什么?

致谢

1 个答案:

答案 0 :(得分:1)

“生产者”向Kafka主题发送消息。它会停留一段时间(默认为7天,对吧?)。

是的,生产者将数据发送到Kafka主题。每个主题都有其自己的可配置cleanup.policy。默认情况下,保留期限设置为7天。您还可以根据字节大小配置主题的保留时间。

但是“消费者”会收到这样的消息,因此永远保持该消息没有太大意义。

Kafka可以看作是发布者/订阅消息系统(尽管主要是流媒体平台)。最大的好处是,一个以上的消费者可以阅读同一主题的相同消息。与其他消息传递系统相比,数据在消费者确认后不会删除。

否则,当我再次连接到Kafka时,我将再次下载相同的消息。所以我必须避免重复。

Kafka具有“偏移”和“ ConsumerGroups”的概念,我强烈建议您熟悉它们,因为它们在与Kafka一起工作时必不可少。每个使用者都是ConsumerGroup的一部分,主题中的每个消息都有一个唯一的标识符,称为“偏移”。偏移量就像一个唯一的标识符,在其生命周期内始终保持相同的消息。

每个ConsumerGroup都会跟踪已消耗的消息(偏移)。现在,如果您不想再次读取相同的消息,那么ConsumerGroup只需要提交这些偏移量,就不会再次读取它们。

这样,您将不会使用重复项,但是其他使用者(具有不同的ConsumerGroup)仍然能够再次读取所有消息。