Kafka Kstream和Spring @KafkaListener有何不同?

时间:2018-01-18 11:34:55

标签: apache-kafka spring-kafka

我对卡夫卡有点新鲜,并通过文档阅读。 Kafka办公地点有一个example on KStream。应用程序绑定到主题的位置,并且一旦消息到达其处理。结果将发回主题或数据库。

Spring Kafka注释@KafkaListener具有相同的功能。例如,我尝试了KafaListner application。在这里,我们会听取一个主题并在发布内容时对其进行处理。

所以我很想知道 1.这两个如何不同? 2.在哪种情况下更喜欢哪一个?

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。