首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kafka Streams DSL over Kafka Consumer API

Kafka Streams DSL over Kafka Consumer API
EN

Stack Overflow用户
提问于 2020-09-13 01:19:57
回答 2查看 150关注 0票数 3

最近,在一次采访中,我被问到一个关于Kafka Streams的问题,更具体地说,面试官想知道为什么/什么时候你会使用Kafka Streams DSL而不是普通的Kafka Consumer API来读取和处理消息流?我无法提供一个令人信服的答案,我想知道其他使用这两种流处理风格的人是否可以分享他们的想法/意见。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-09-13 01:39:59

通常情况下,这取决于用例,什么时候使用KafkaStreams,什么时候使用普通的KafkaStreams/消费者。一般而言,我不敢选择其中一个。

首先,KafkaStreams是建立在KafkaProducers/Consumer之上的,所以使用KafkaStreams可能的任何事情对于普通的Consumer/Producers也是可能的。

我想说的是,与普通的消费者/生产者相比,KafkaStreams应用程序接口没有那么复杂,但也没有那么灵活。现在我们可以开始长时间的讨论,讨论什么是“更少”。

在开发Kafka Streams时,您可以直接应用filtermapjoinaggregate等方法,因为所有的消费和生产部分都是在幕后抽象出来的。

当您使用普通的消费者/生产者开发应用程序时,您需要考虑如何在subscribepollsendflush等级别构建客户端。

如果你想拥有更低的复杂度(但灵活性也更低) Kafka,ksqldb是另一个选择,你可以选择构建你的应用程序。

票数 3
EN

Stack Overflow用户

发布于 2020-09-13 21:33:38

以下是您可能更喜欢Kafka Streams而不是核心生产者/消费者API的一些场景:

  1. 它允许您轻松构建复杂的处理流水线。所以。让我们假设(一个人为设计的示例)您有一个包含客户订单的主题,并且您希望根据交付城市过滤订单,并将其保存到DB表中以便于持久化,并将其保存到Elasticsearch索引中以获得快速搜索体验。在这样的场景中,您将消费来自源主题的消息,使用Streams DSL filter函数根据城市过滤掉不必要的订单,并将过滤数据存储到单独的Kafka主题(使用KStream.to()KTable.to()),最后使用Kafka Connect,消息将存储到数据库表和Elasticsearch中。你也可以使用核心的生产者/消费者应用程序接口来做同样的事情,但这需要更多的代码。

  1. 在数据处理管道中,您可以在同一事务中执行消费-处理-生产。因此,在上面的例子中,Kafka将确保从源主题到DB和Elasticsearch的只有一次的语义和事务。不会因为网络故障和重试而引入任何重复的消息。当您进行聚合时,此功能尤其有用,例如在单个产品级别进行订单计数。在这种情况下,重复总是会给出错误的结果。

  1. 您还可以通过更低的延迟来丰富传入数据。让我们假设在上面的示例中,您希望使用存储的客户数据中的客户电子邮件地址来丰富订单数据。如果没有Kafka Streams,你会怎么做?您可能会为网络上的每个传入订单调用REST API,这肯定是一个影响吞吐量的代价高昂的操作。在这种情况下,您可能希望将所需的客户数据存储在压缩的Kafka主题中,并使用KTableGlobalKTable将其加载到流应用程序中。现在,您只需在KTable中对客户电子邮件地址执行简单的本地查找。请注意,这里的KTable数据将存储在Kafka Streams附带的嵌入式RocksDB中,而且由于KTable由Kafka主题支持,因此流应用程序中的数据将持续实时更新。换句话说,不会有陈旧的数据。这本质上是物化视图模式的一个示例。

  1. 假设你想连接两个不同的数据流。因此,在上面的示例中,您希望只处理成功付款的订单,并且付款数据来自另一个Kafka主题。现在,可能会出现付款延迟或付款事件先于订单事件的情况。在这种情况下,您可能需要执行一小时窗口连接。因此,如果订单和相应的支付事件在一个小时的窗口内,订单将被允许沿着管道继续进行进一步处理。如您所见,您需要存储一个小时窗口的状态,该状态将存储在Kafka Streams的Rocks DB中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63862955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档