我最近开始学习Kafka,并遇到了这些问题。
Consumer和Stream之间有什么区别?对我而言,如果有任何工具/应用程序消费来自Kafka的消息,则是Kafka世界中的消费者。
Stream有何不同,因为它也会从Kafka消费或产生消息?为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序并根据需要对其进行处理,或者将其从消费者应用程序发送到Spark?
我在此方面使用了Google,但没有得到任何好的答案。抱歉,这个问题太琐碎了。
我最近开始学习Kafka,并遇到了这些问题。
Consumer和Stream之间有什么区别?对我而言,如果有任何工具/应用程序消费来自Kafka的消息,则是Kafka世界中的消费者。
Stream有何不同,因为它也会从Kafka消费或产生消息?为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序并根据需要对其进行处理,或者将其从消费者应用程序发送到Spark?
我在此方面使用了Google,但没有得到任何好的答案。抱歉,这个问题太琐碎了。
Answers:
更新2018年4月9日:现在,您还可以使用ksqlDB(Kafka的事件流数据库)在Kafka中处理数据。ksqlDB是在Kafka的Streams API之上构建的,它还具有对“ streams”和“ tables”的一流支持。
Consumer API和Streams API有什么区别?
Kafka的Streams库(https://kafka.apache.org/documentation/streams/)是建立在Kafka生产者和消费者客户端之上的。与普通客户端相比,Kafka Streams的功能明显更强大且更具表现力。
与Kafka Streams相比,使用Kafka Streams编写一个真实的应用程序开始要容易得多,而且要快得多。
以下是Kafka Streams API的一些功能,消费者客户端不支持其中的大多数功能(这将要求您自己实现缺少的功能,实质上是重新实现Kafka Streams)。
map
,filter
,reduce
以及(2)势在必行风格处理器API用于如做复杂事件处理(CEP),和(3)你甚至可以结合DSL和Processor API。请参阅http://docs.confluent.io/current/streams/introduction.html,以获取有关Kafka Streams API的更详细但更高级的介绍,该介绍还应该有助于您了解与较低级别的Kafka使用者的区别客户。
除了Kafka Streams,您还可以使用事件流数据库ksqlDB在Kafka中处理数据。ksqlDB构建在Kafka Streams之上。它支持与Kafka Streams基本相同的功能,但是您编写的是流式SQL,而不是Java或Scala。您可以通过编程方式通过CLI或REST API与ksqlDB进行交互;如果您不想使用REST,它也具有本机Java客户端。
那么,Kafka Streams API有何不同,因为它也会从Kafka中消费或产生消息?
是的,Kafka Streams API既可以读取数据,也可以将数据写入Kafka。它支持Kafka事务,因此您可以例如从一个或多个主题中阅读一则或多则消息,根据需要选择更新处理状态,然后将一个或多个输出消息写至一个或多个主题-全部作为一个原子操作。
为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序并根据需要对其进行处理,或者将其从消费者应用程序发送到Spark?
是的,您可以编写自己的使用者应用程序-正如我提到的那样,Kafka Streams API本身使用Kafka使用者客户端(加上生产者客户端),但是您必须手动实现Streams API提供的所有独特功能。有关“免费”获得的所有内容,请参见上面的列表。因此,用户选择普通的客户客户端而不是功能更强大的Kafka Streams库是一种罕见的情况。
Kafka Stream组件旨在支持ETL类型的消息转换。表示从主题输入流,转换并输出到其他主题的方法。它支持实时处理,同时还支持高级分析功能,例如聚合,开窗,联接等。
“ Kafka Streams通过建立在Kafka生产者和使用者库上,并利用Kafka的本机功能来提供数据并行性,分布式协调,容错和操作简便性,从而简化了应用程序开发。”
以下是Kafka Stream上的关键架构功能。请参考这里
根据下面的理解,如果有任何遗漏或误导之处,我愿意随时进行更新
消费者-生产者在哪里使用:
在哪里使用Kafka Stream: