三种大数据流处理框架选择比较:Apache Kafka流、Apache Spark流和Apache Flink - quora


所有这些框架(Kafka Streams,ksqlDB,Flink,Spark)对于特定的用例和需求都是很棒的。
决策选择真的很难,因为涉及许多因素。以下是一些常见问题和准则,可帮助您做出正确的决定:

  • 您是否已在另一个项目中使用这些框架之一?已经经历过?然后评估它是否也适用于您的下一个项目。学习曲线要​​简单得多(但也要了解这些项目的技术折衷)。
  • 您是否已经使用Kafka进行消息传递/数据提取(例如,导入Hadoop,S3或Elastic)?问问自己,您是否真的需要基础结构中的其他组件,或者Kafka原生技术(例如Kafka Streams或ksqlDB)是否也可以解决您的问题。优势:只需运行一个基础架构,就可以与一个供应商合作。
  • 无论如何,大多数Spark和Flink项目都使用Kafka作为消息传递和接收层。评估Spark或Flink是否提供其他/更好的功能来满足您的需求。Spark专为“真正的批处理”而构建,对此仍然很棒。Flink非常适合进行更复杂的流处理作业(包括stream + batch)。
  • Kafka Streams,Flink和Spark Streaming的功能重叠可能超过90%。所有这些都可以用于类似的用例。找出Flink是否能增加足够的附加价值(再次,使用多个群集的主要缺点是您在基础架构中还需要另一个系统,这导致运维和支持更加困难,尤其是在端到端关键业务交易中)。特别是对于业务应用程序的关键任务生产部署(例如即时付款),您将非常感激只支持一个部署。考虑一下一次语义(EOS):仅使用Kafka本机EOS而不是组合用于这些事务的不同框架会更容易,风险也更低。
  • 您需要哪种部署类型?Kafka Streams是一个库包。轻松嵌入到任何现有(旧版)应用程序中,并易于构建轻量级但可扩展的新现代应用程序。但是您必须自己构建包装器,或使用其他工具/框架(例如Spring Boot)。Spark和Flink均构建为具有自己基础结构的分布式集群。两者都被“Dock化”以作为更轻量级的应用程序运行,但这并不是他们最初设计的目的。评估这种方法的权衡和成熟度!
  • 不要忘了评估ksqlDB 。这是另一个Kafka本机流处理框架,结合了两种方法的优点(Kafka Streams与Spark / Flink):它是Kafka本机,不需要其他基础结构。部署为单独的,独立的,可扩展的群集(但高可用性,保证的排序,一次准确的语义等,通过Kafka群集和内部Kafka主题进行管理)。

概要:
问问自己这些问题,并做出正确的决定。所有这些框架(Kafka Streams,ksqlDB,Flink,Spark)对于特定的用例和需求都是很棒的。在大多数基础架构中,将其中的两个或多个结合起来以解决各种不同的问题。
等等,Apache Beam呢?
Apache Beam是最小的公分母。如果要使用多个框架(或能够迁移到GCP),那么Beam是正确的方法。但是,如果您想为问题选择最佳的流处理框架,则不会。
例如,几年前,Kafka Streams社区决定不实施Beam接口,因为这会限制功能和功能。