Alpakka kafka vs Kafka streams



我们正在构建一个高吞吐量、低延迟的流处理应用程序。我们使用ApacheKafka作为消息传递平台和数据库。

Kafka Streams和Alpakka Kafka框架似乎有很多共同之处,但Kafka Stream似乎更像是Kafka的"原生",而Alpakka允许我们使用Akka框架的力量。

这两个框架之间的主要区别是什么?

关键区别在于,Kafka流在输入端和输出端都需要Kafka主题。使用Alpakka,您可以为所有类型的输入和输出创建处理管道,而不仅仅是Kafka主题。此外,akka流DSL比Kafka流DSL更强大(也更复杂(。

通过使用Alpakka,各种类型的汇流(管道(可以与Akka Stream中的内置API连接。例如,可以同时使用Alpakka Kafka和Alpakka Cassandra来启用自动发布消息和保存到数据库。Akka中的测试工具包还可以使测试在整个系统中保持一致。

我对两者都有经验。

在我看来,对于Kafka Streams来说,致命的弱点是它使用的数据存储RockDB,这是KTables和内部State Stores所必需的。RockDB加载单个值很好,但如果您对事物进行迭代,在数据集大小为100000之后,性能会显著下降。您可以将数据存储更改为某些内容,但它实际上并没有得到很好的文档记录。

它还受到密钥/值数据库的缺点的影响,你不能只在主键上提问,也没有通配符匹配或任何东西,而且它没有办法实现CQRS模式

另一方面,Akka对新手并不友好,特别是如果你不掌握流处理概念的话。但它并没有与选项的单一持久性相结合,它有实现CQRS的组件。Akka开发人员进行了大量的脑力激荡,以提高Kafka在流处理方面的性能。

另一个非常重要的观点是,虽然有些人可能会说这并不相关,但Kafka Streams没有背压机制,但Alpakka Kafka有它,这在一些制作场景中可能非常关键,你可以用这个Netflix博客说服自己。

简而言之,如果您想快速开始流处理,请从Kafka Streams开始,但要准备好碰壁并切换到Alpakka Streams。

如果你需要例子,我有两个关于这些主题的博客,你可以查看这些,博客1博客2

最新更新