我最近开始学习Kafka,最后问了这些问题。
消费者和流媒体的区别是什么?对我来说,如果任何工具/应用程序使用来自kafka的消息,那么它就是kafka世界中的消费者。
流是如何不同的,因为这也消费或产生消息Kafka?为什么需要它呢?因为我们可以使用消费api编写自己的消费应用程序,并根据需要对它们进行处理,或者将它们从消费应用程序发送到spark?
我用谷歌搜索了一下,但没有得到任何好的答案。抱歉,这个问题太琐碎了。
我最近开始学习Kafka,最后问了这些问题。
消费者和流媒体的区别是什么?对我来说,如果任何工具/应用程序使用来自kafka的消息,那么它就是kafka世界中的消费者。
流是如何不同的,因为这也消费或产生消息Kafka?为什么需要它呢?因为我们可以使用消费api编写自己的消费应用程序,并根据需要对它们进行处理,或者将它们从消费应用程序发送到spark?
我用谷歌搜索了一下,但没有得到任何好的答案。抱歉,这个问题太琐碎了。
2条答案
按热度按时间9q78igpj1#
构建kafka流组件以支持etl类型的消息转换。表示从主题中输入流,转换并输出到其他主题。它支持实时处理,同时支持高级分析功能,如聚合、窗口、连接等。
“kafka streams通过构建kafka生产者和消费者库并利用kafka的本机功能来提供数据并行、分布式协调、容错和操作简单性,从而简化了应用程序开发。”
以下是Kafka河的主要建筑特征。请参考这里
流分区和任务:kafka streams使用分区和任务的概念作为基于kafka主题分区的并行模型的逻辑单元。
线程模型:kafka streams允许用户配置库可以用来在应用程序示例中并行处理的线程数。
本地状态存储:kafka streams提供所谓的状态存储,流处理应用程序可以使用状态存储来存储和查询数据,这是实现有状态操作时的一个重要功能
容错:kafka流建立在kafka内部本地集成的容错能力之上。kafka分区具有高可用性和可复制性,因此当流数据持久化到kafka时,即使应用程序失败并需要重新处理它,它也是可用的。
根据我的理解,以下是关键的差异,我愿意更新,如果遗漏或误导任何一点
在何处使用消费者-生产者:
如果只有一个使用者,则使用消息流程,但不要泄漏到其他主题。
作为第1点,如果只有生产者生产的消息,我们不需要Kafka流。
如果消费者消息来自一个kafka集群,但发布到不同的kafka集群主题。在这种情况下,甚至可以使用kafka流,但必须使用单独的生产者将消息发布到不同的集群。或者简单地使用Kafka消费者-生产者机制。
批量处理—如果需要收集消息或进行批量处理,最好使用常规的传统方式。
在哪里使用Kafka流:
如果您使用来自一个主题的消息,那么转换并发布到其他主题kafka stream最适合。
实时处理、实时分析和机器学习。
有状态转换,如聚合、连接窗口等。
计划使用本地状态存储或挂载状态存储,如portworx等。
实现了精确的一种处理语义和自动定义的容错。
mo49yndu2#
更新日期:2018年4月9日:现在您还可以使用kafka的事件流数据库ksqldb来处理kafka中的数据。ksqldb是在kafka的streamsapi之上构建的,它还提供了对“streams”和“tables”的一流支持。
consumer api和streams api之间有什么区别?
Kafka的流图书馆(https://kafka.apache.org/documentation/streams/)是建立在Kafka生产者和消费者客户之上的。Kafka流是显着更强大,也比普通客户更具表现力。
用kafka流从头到尾编写一个真实世界的应用程序要比用普通用户编写简单得多,也要快得多。
以下是kafka streams api的一些特性,其中大部分不受客户机支持(这将要求您自己实现缺少的特性,实际上是重新实现kafka streams)。
通过kafka事务支持一次处理语义(eos的意思)
支持容错有状态(当然也支持无状态)处理,包括流连接、聚合和窗口化。换句话说,它支持对应用程序的处理状态进行开箱即用的管理。
支持事件时间处理以及基于处理时间和摄取时间的处理。它还无缝地处理无序数据。
对流和表都有一流的支持,这是流处理与数据库相结合的地方;实际上,大多数流处理应用程序都需要流和表来实现它们各自的用例,因此如果流处理技术缺少这两种抽象中的任何一种(比如说,不支持表),那么您要么被卡住,要么必须自己手动实现此功能(祝您好运……)
支持交互式查询(也称为“可查询状态”),以向其他应用程序和服务公开最新的处理结果
更具表现力:它附带(1)一个函数式编程风格的dsl,具有如下操作
map
,filter
,reduce
以及(2)一个命令式的处理器api,例如执行复杂事件处理(cep),以及(3)您甚至可以将dsl和处理器api结合起来。有自己的单元和集成测试工具包。
看到了吗http://docs.confluent.io/current/streams/introduction.html 有关kafka streams api的更详细但更高级的介绍,它还可以帮助您了解与较低级别kafka客户机的区别。
除了kafka流,您还可以使用事件流数据库ksqldb来处理kafka中的数据。ksqldb建立在Kafka河之上。它基本上支持与kafka流相同的特性,但是您编写的是流式sql,而不是java或scala。通过编程,您可以通过cli或restapi与ksqldb交互;它还有一个本机java客户机,以防您不想使用rest。
那么,kafka streams api与kafka有什么不同,因为它也从kafka消费消息或向kafka生成消息?
是的,kafka streams api既可以读取数据,也可以向kafka写入数据。它支持kafka事务,因此您可以从一个或多个主题中读取一个或多个消息,如果需要,可以选择更新处理状态,然后将一个或多个输出消息写入一个或多个主题,全部作为一个原子操作。
为什么需要它呢?因为我们可以使用消费api编写自己的消费应用程序,并根据需要对它们进行处理,或者将它们从消费应用程序发送到spark?
是的,您可以编写自己的消费者应用程序--正如我提到的,kafka streams api使用kafka消费者客户端(加上生产者客户端)本身--但是您必须手动实现streams api提供的所有独特功能。请参阅上面的列表,了解您“免费”获得的所有信息。因此,很少有用户选择普通客户机而不是更强大的kafka流库。