最近,在一次采访中,我被问到一个关于Kafka Streams的问题,更具体地说,面试官想知道为什么/什么时候你会使用Kafka Streams DSL而不是普通的Kafka Consumer API来读取和处理消息流?我无法提供一个令人信服的答案,我想知道其他使用这两种流处理风格的人是否可以分享他们的想法/意见。谢谢。
发布于 2020-09-13 01:39:59
通常情况下,这取决于用例,什么时候使用KafkaStreams,什么时候使用普通的KafkaStreams/消费者。一般而言,我不敢选择其中一个。
首先,KafkaStreams是建立在KafkaProducers/Consumer之上的,所以使用KafkaStreams可能的任何事情对于普通的Consumer/Producers也是可能的。
我想说的是,与普通的消费者/生产者相比,KafkaStreams应用程序接口没有那么复杂,但也没有那么灵活。现在我们可以开始长时间的讨论,讨论什么是“更少”。
在开发Kafka Streams时,您可以直接应用filter
、map
、join
或aggregate
等方法,因为所有的消费和生产部分都是在幕后抽象出来的。
当您使用普通的消费者/生产者开发应用程序时,您需要考虑如何在subscribe
、poll
、send
、flush
等级别构建客户端。
如果你想拥有更低的复杂度(但灵活性也更低) Kafka,ksqldb是另一个选择,你可以选择构建你的应用程序。
发布于 2020-09-13 21:33:38
以下是您可能更喜欢Kafka Streams而不是核心生产者/消费者API的一些场景:
filter
函数根据城市过滤掉不必要的订单,并将过滤数据存储到单独的Kafka主题(使用KStream.to()
或KTable.to()
),最后使用Kafka Connect,消息将存储到数据库表和Elasticsearch中。你也可以使用核心的生产者/消费者应用程序接口来做同样的事情,但这需要更多的代码。KTable
或GlobalKTable
将其加载到流应用程序中。现在,您只需在KTable中对客户电子邮件地址执行简单的本地查找。请注意,这里的KTable数据将存储在Kafka Streams附带的嵌入式RocksDB中,而且由于KTable由Kafka主题支持,因此流应用程序中的数据将持续实时更新。换句话说,不会有陈旧的数据。这本质上是物化视图模式的一个示例。https://stackoverflow.com/questions/63862955
复制相似问题