kafka kstream和spring@kafkalistener有何不同?

xe55xuns  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(602)

我对Kafka有点陌生,正在阅读文档。Kafka办公网站在kstream上有一个例子。应用程序绑定到主题的位置,消息一到达,它就被处理。结果将发布回主题或数据库。
spring kafka annotation@kafkalistener具有相同的功能。例如,我尝试了kafalistner应用程序。在这里,我们也听一个主题,并在发布内容时对其进行处理。
所以我很想知道1。这两个有什么不同?2在哪种情况下更喜欢哪一种?

hfyxw5xn

hfyxw5xn1#

@KafkaListener 没有使用 KStream (流api)。 @KafkaListener 是来自的注解 spring-kafka 它在内部使用使用者api。 KStream 在consumer api中不可用,在stream api中可用。
要了解流API和消费者API之间的差异,请查看您的问题的评论中链接的问题。记住一件事, spring-kafka 库 Package kafka库,因此您有四个可用的api:streamapi Package spring-kafka ,消费者api Package spring-kafka 流api和消费者api。您提到的两个示例是:流api和由 spring-kafka .

bakd9h0s

bakd9h0s2#

请注意,这是一个非常有限的解释。参考文件。
为了回答您的问题1“这两个主题有何不同?”—kafkalistener和kstream都使用来自kafka主题的消息。然而,它们在维持状态的方式上有所不同。Kafka主义者不维护国家。它在消息到达时消耗消息。kstream将主题读取为连续的消息流。
假设一个主题发送行,我们保持每个单词的数量。所以在我们把这两行字发出去之后,
你好,早上好,你好,谢谢
我们将有字数-你好2,早上好1,早上1&谢谢1。
kakfalistener可用于手动保持单词计数。开发人员可以将单词存储在静态hashmap中并保持计数。kstream会很自然地这样做,因为它将主题作为流来读取-
它被设计成在无限的、无界的数据流上操作
kstream示例对此进行了详细解释。
要回答您的问题2“在哪个场景中更喜欢哪一个?”,如果您需要在不维护状态的情况下使用消息,请使用kafkalistener..就像管道一样,从源到接收器获取信息。如果您的消息彼此相关,请使用kstream—例如在所有消息中查找特定单词的总数(大致类似于sql中的group by)。

相关问题