我对Kafka有点陌生,正在阅读文档。Kafka办公网站在kstream上有一个例子。应用程序绑定到主题的位置,消息一到达,它就被处理。结果将发布回主题或数据库。
spring kafka annotation@kafkalistener具有相同的功能。例如,我尝试了kafalistner应用程序。在这里,我们也听一个主题,并在发布内容时对其进行处理。
所以我很想知道1。这两个有什么不同?2在哪种情况下更喜欢哪一种?
我对Kafka有点陌生,正在阅读文档。Kafka办公网站在kstream上有一个例子。应用程序绑定到主题的位置,消息一到达,它就被处理。结果将发布回主题或数据库。
spring kafka annotation@kafkalistener具有相同的功能。例如,我尝试了kafalistner应用程序。在这里,我们也听一个主题,并在发布内容时对其进行处理。
所以我很想知道1。这两个有什么不同?2在哪种情况下更喜欢哪一种?
2条答案
按热度按时间hfyxw5xn1#
@KafkaListener
没有使用KStream
(流api)。@KafkaListener
是来自的注解spring-kafka
它在内部使用使用者api。KStream
在consumer api中不可用,在stream api中可用。要了解流API和消费者API之间的差异,请查看您的问题的评论中链接的问题。记住一件事,
spring-kafka
库 Package kafka库,因此您有四个可用的api:streamapi Packagespring-kafka
,消费者api Packagespring-kafka
流api和消费者api。您提到的两个示例是:流api和由spring-kafka
.bakd9h0s2#
请注意,这是一个非常有限的解释。参考文件。
为了回答您的问题1“这两个主题有何不同?”—kafkalistener和kstream都使用来自kafka主题的消息。然而,它们在维持状态的方式上有所不同。Kafka主义者不维护国家。它在消息到达时消耗消息。kstream将主题读取为连续的消息流。
假设一个主题发送行,我们保持每个单词的数量。所以在我们把这两行字发出去之后,
你好,早上好,你好,谢谢
我们将有字数-你好2,早上好1,早上1&谢谢1。
kakfalistener可用于手动保持单词计数。开发人员可以将单词存储在静态hashmap中并保持计数。kstream会很自然地这样做,因为它将主题作为流来读取-
它被设计成在无限的、无界的数据流上操作
kstream示例对此进行了详细解释。
要回答您的问题2“在哪个场景中更喜欢哪一个?”,如果您需要在不维护状态的情况下使用消息,请使用kafkalistener..就像管道一样,从源到接收器获取信息。如果您的消息彼此相关,请使用kstream—例如在所有消息中查找特定单词的总数(大致类似于sql中的group by)。