我正在学习卡夫卡,如果有人可以帮助我理解一件事。 “生产者向Kafka主题发送消息。它停留了一段时间(默认为7天,对吗?)。
但是“消费者”会收到这样的消息,因此永远保持该消息没有太大意义。 我希望这些消息在消费者得到时消失。 否则,当我再次连接到Kafka时,我将再次下载相同的消息。所以我必须避免重复。
其背后的逻辑是什么?
致谢
答案 0 :(得分:1)
“生产者”向Kafka主题发送消息。它会停留一段时间(默认为7天,对吧?)。
是的,生产者将数据发送到Kafka主题。每个主题都有其自己的可配置cleanup.policy
。默认情况下,保留期限设置为7天。您还可以根据字节大小配置主题的保留时间。
但是“消费者”会收到这样的消息,因此永远保持该消息没有太大意义。
Kafka可以看作是发布者/订阅消息系统(尽管主要是流媒体平台)。最大的好处是,一个以上的消费者可以阅读同一主题的相同消息。与其他消息传递系统相比,数据在消费者确认后不会删除。
否则,当我再次连接到Kafka时,我将再次下载相同的消息。所以我必须避免重复。
Kafka具有“偏移”和“ ConsumerGroups”的概念,我强烈建议您熟悉它们,因为它们在与Kafka一起工作时必不可少。每个使用者都是ConsumerGroup的一部分,主题中的每个消息都有一个唯一的标识符,称为“偏移”。偏移量就像一个唯一的标识符,在其生命周期内始终保持相同的消息。
每个ConsumerGroup都会跟踪已消耗的消息(偏移)。现在,如果您不想再次读取相同的消息,那么ConsumerGroup只需要提交这些偏移量,就不会再次读取它们。
这样,您将不会使用重复项,但是其他使用者(具有不同的ConsumerGroup)仍然能够再次读取所有消息。