我对卡夫卡有点新鲜,并通过文档阅读。 Kafka办公地点有一个example on KStream。应用程序绑定到主题的位置,并且一旦消息到达其处理。结果将发回主题或数据库。
Spring Kafka注释@KafkaListener具有相同的功能。例如,我尝试了KafaListner application。在这里,我们会听取一个主题并在发布内容时对其进行处理。
所以我很想知道 1.这两个如何不同? 2.在哪种情况下更喜欢哪一个?
答案 0 :(得分:0)
请注意,这是一个非常有限的解释。请参阅文档。
回答你的问题1"这两个是如何不同的?" - KafkaListener和KStream都使用来自Kafka主题的消息。但是他们维持状态的方式不同。 KafkaListener不维护状态。它会消耗消息。 KStream将主题读作连续的消息流。
让我们假设一个主题发送行,我们维护每个单词的数量。所以在我们发送这两个主题之后,
你好,早上好, 您好,谢谢
我们将使用单词计数 - Hello 2,good 1,morning 1&谢谢1。
KakfaListener可用于手动保持此字数。开发人员可以将单词存储在静态Hashmap中并保留计数。 KStream会自然地做到这一点,因为它将主题读作流 -
它旨在对无限的,无限制的数据流进行操作
KStream示例详细解释了这一点。
要回答您的问题2"在哪种情况下更喜欢哪一个?",如果您需要使用KafkaListener而不需要维护状态...就像管道一样,请使用KafkaListener将信息从源接收到接收器。如果您的消息彼此相关,请使用KStream - 例如查找所有消息中特定单词的总数(大致类似于SQL中的GROUP BY)。
答案 1 :(得分:0)
@KafkaListener
未使用KStream
(Stream API)。 @KafkaListener
是来自spring-kafka
的注释,它在内部使用Consumer API。 Consumer API中不提供KStream
,它在Stream API中可用。
对于Stream和Consumer API之间的差异,请查看与您的问题相关的问题。请记住一件事,spring-kafka
库包装Kafka库,因此您有四个API:由spring-kafka
包装的Stream API,由spring-kafka
包装的Consumer API,Stream API和Consumer API。您提到的两个示例是:由spring-kafka
包装的Stream API和Consumer API。