[英]Kafka: Consumer API vs Streams API
我最近开始学习 Kafka 并最终解决了这些问题。
消费者和流之间有什么区别? 对我来说,如果任何工具/应用程序消费来自 Kafka 的消息,那么它就是 Kafka 世界中的消费者。
Stream 有什么不同,因为它也从 Kafka 消费或向 Kafka 生产消息? 为什么需要它,因为我们可以使用消费者 API 编写自己的消费者应用程序并根据需要处理它们或将它们从消费者应用程序发送到 Spark?
我在这方面做了谷歌,但没有得到任何好的答案。 对不起,如果这个问题太微不足道了。
2021 年 1 月更新:我写了一个关于 Kafka 基础知识的四部分博客系列,我建议阅读这些问题。 对于这个问题,请查看有关处理基础知识的第 3 部分。
2018 年 4 月更新:现在您还可以使用ksqlDB (Kafka 的事件流数据库)来处理 Kafka 中的数据。 ksqlDB 建立在 Kafka 的 Streams API 之上,它也提供一流的 Streams 和 Tables 支持。
消费者 API 和 Streams API 有什么区别?
Kafka 的 Streams 库 ( https://kafka.apache.org/documentation/streams/ ) 建立在 Kafka 生产者和消费者客户端之上。 与普通客户端相比,Kafka Streams 明显更强大,也更具表现力。
与普通消费者相比,使用 Kafka Streams 编写从头到尾的实际应用程序要简单得多,速度也更快。
以下是 Kafka Streams API 的一些功能,其中大部分功能不受消费者客户端支持(这需要您自己实现缺失的功能,基本上是重新实现 Kafka Streams)。
map
、 filter
、 reduce
等操作的函数式编程风格DSL以及 (2) 用于执行复杂事件处理 (CEP) 的命令式处理器 API ,以及 (3) 您甚至可以结合 DSL 和 Processor API。请参阅http://docs.confluent.io/current/streams/introduction.html以获取对 Kafka Streams API 的更详细但仍然高级的介绍,这也应该有助于您了解与较低级别的 Kafka 消费者的区别客户。
除了 Kafka Streams,您还可以使用流数据库ksqlDB来处理 Kafka 中的数据。 ksqlDB 将其存储层 (Kafka) 与其计算层(ksqlDB 本身;这里的大部分功能使用 Kafka Streams)分开。 它支持与 Kafka Streams 基本相同的功能,但您编写流式 SQL 语句而不是 Java 或 Scala 代码。 您可以通过 UI、CLI 和 REST API 与 ksqlDB 交互; 它还有一个本地 Java 客户端,以防您不想使用 REST。 最后,如果您不想自行管理基础设施, ksqlDB 可作为Confluent Cloud 中 的完全托管服务使用。
那么 Kafka Streams API 有什么不同,因为它也从 Kafka 消费或向 Kafka 生产消息?
是的,Kafka Streams API 既可以读取数据,也可以向 Kafka 写入数据。 它支持 Kafka 事务,因此您可以例如从一个或多个主题读取一条或多条消息,如果需要,可选择更新处理状态,然后将一条或多条输出消息写入一个或多个主题——全部作为一个原子操作。
为什么需要它,因为我们可以使用消费者 API 编写自己的消费者应用程序并根据需要处理它们或将它们从消费者应用程序发送到 Spark?
是的,您可以编写自己的消费者应用程序——正如我提到的,Kafka Streams API 使用 Kafka 消费者客户端(加上生产者客户端)本身——但是您必须手动实现 Streams API 提供的所有独特功能. 有关“免费”获得的所有内容,请参阅上面的列表。 因此,用户会选择普通的消费者客户端而不是更强大的 Kafka Streams 库是一种罕见的情况。
为支持 ETL 类型的消息转换而构建的 Kafka Stream 组件。 表示从主题输入流,转换并输出到其他主题。 它支持实时处理,同时支持高级分析功能,如聚合、加窗、连接等。
“Kafka Streams 通过构建 Kafka 生产者和消费者库并利用 Kafka 的本机功能来提供数据并行性、分布式协调、容错和操作简单性,从而简化了应用程序开发。”
以下是 Kafka Stream 的关键架构特性。 请参考 这里
根据我的理解,以下是关键差异,如果遗漏或误导任何一点,我愿意更新
在哪里使用消费者 - 生产者:
在哪里使用 Kafka Stream:
Streams 建立在 Consumer 和 Producer API 之上,因此可以在更高的层次上工作,这意味着
例如,Streams 自动处理事务提交,这意味着您无法控制提交的确切时间点(无论您使用 Streams DSL 还是 Processer API)。 相比之下,消费者/生产者 API 为您提供了这种控制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.