我最近开始学习Kafka并最终得到这些问题。
Consumer和Stream有什么区别?对我来说,如果任何工具/应用程序消费来自Kafka的消息是Kafka世界中的消费者。
Stream如何与Kafka消费或产生消息?为什么需要它,因为我们可以编写自己的消费者 应用程序使用Consumer API并根据需要处理它们或将它们从消费者应用程序发送到Spark?
我在这方面做了Google,但没有得到任何好的答案。对不起,如果这个问题太琐碎了。
答案 0 :(得分:65)
更新2018年4月9日 :现在您还可以使用Kafka的流式SQL引擎KSQL来处理您在Kafka的数据。 KSQL建立在Kafka的Streams API之上,它还具有对“流”和“表”的一流支持。可以把它想象成Kafka Streams的SQL兄弟,你不必用Java或Scala编写任何编程代码。
Consumer API和Streams API有什么区别?
Kafka的Streams API(https://kafka.apache.org/documentation/streams/)建立在Kafka的制作人和消费者客户之上。 它比Kafka消费者客户端更强大,也更具表现力。以下是Kafka Streams API的一些功能:
map
,filter
,reduce
等操作以及(2)命令式样式Processor API例如进行复杂事件处理(CEP),以及(3)您甚至可以组合DSL和处理器API。有关Kafka Streams API的更详细但仍然高级别的介绍,请参阅http://docs.confluent.io/current/streams/introduction.html,这也有助于您了解与较低级别Kafka客户端客户端的差异。还有一个Docker-based tutorial for the Kafka Streams API,本周早些时候I blogged about。
那么Kafka Streams API是如何不同的,因为这也消耗或传递给Kafka?
是的,Kafka Streams API既可以读取数据,也可以将数据写入Kafka。
为什么需要它,因为我们可以使用Consumer API编写我们自己的消费者应用程序并根据需要处理它们或者从消费者应用程序将它们发送到Spark?
是的,您可以编写自己的消费者应用程序 - 正如我所提到的,Kafka Streams API使用Kafka消费者客户端(加上生产者客户端)本身 - 但您必须手动实现所有独特的功能。 Streams API提供。请参阅上面的列表,了解“免费”获得的所有信息。因此,用户会选择低级别消费者客户端而不是功能更强大的Kafka Streams API,这是一种罕见的情况。
答案 1 :(得分:5)
Kafka Stream组件旨在支持ETL类型的消息转换。表示从主题输入流,转换并输出到其他主题。 它支持实时处理,同时还支持聚合,开窗,联接等高级分析功能。
“ Kafka Streams通过建立在Kafka生产者和使用者库上,并利用Kafka的本机功能来提供数据并行性,分布式协调,容错和操作简便性,从而简化了应用程序开发。”
以下是Kafka Stream上的关键体系结构功能。请参阅here
基于下面的理解,我发现有关键差异时,如果有任何遗漏或误导之处,我随时可以进行更新
在哪里使用“消费者-生产者”:
在何处使用Kafka Stream:
答案 2 :(得分:0)
Streams 建立在消费者和生产者 API 之上,因此可以在更高的层次上工作,这意味着
例如,Streams 会自动处理事务提交,这意味着您无法控制提交的确切时间点(无论您使用 Streams DSL 还是 Processer API)。相比之下,消费者/生产者 API 为您提供了这种控制。