将Kafka与Spark相比仅使用Spark的优势

时间:2019-06-16 18:08:27

标签: apache-spark apache-kafka stream-processing

卡夫卡很常见。许多公司都在使用它。我完全了解Kafka和Spark的工作方式,并且我对两者都有经验。我不明白的是用例。为什么您将Kafka与Spark一起使用,而不仅仅是Spark?

如我所见,Kafka的主要用途是作为ETL管道中用于实时(流)数据的暂存区域。

我想象有一个数据源集群,数据最初存储在其中。例如,Vertica,Cassandra,Hadoop等。

然后有一个处理集群,该集群从数据源集群读取数据,并将其写入分布式Kafka日志,该日志基本上是分段数据集群。

然后有另一个处理集群-Spark集群,它从Kafka读取数据,对数据进行一些转换和聚合,然后将其写入最终目标。

如果我想像的是正确的,我可以从中间切开Kafka,然后在运行于Spark集群上的Spark程序中,驱动程序将从原始源读取数据并将其并行化以进行处理。将卡夫卡放在中间的好处是什么?

您能给我具体的用例吗,其中Kafka会有所帮助,而不是首先不通过Kafka而仅将数据读取到Spark吗?

1 个答案:

答案 0 :(得分:0)

Kafka Streams直接解决了流处理中的许多难题:

  • 具有毫秒级延迟的一次事件处理(不是微批处理)。
  • 状态完整处理,包括分布式联接和聚集。
  • 便捷的DSL。
  • 使用类似DataFlow的模型处理乱序数据。
  • 具有快速故障转移功能的分布式处理和容错功能。
  • 无停机滚动部署。

Apache Spark可以与Kafka一起使用以流式传输数据,但是,如果仅出于此新应用程序的目的而部署Spark集群,那肯定会带来很大的复杂性。

只是Kafka和您的应用程序。当添加应用程序的新实例或现有实例崩溃时,它还可以平衡处理负载。并维护表的本地状态,并有助于从故障中恢复。

  

那么,您应该使用什么?

     

低延迟和易于使用的事件时间支持也适用于   卡夫卡流。这是一个重点突出的图书馆,非常   非常适合某些类型的任务。这也是为什么它的一些   可以针对Kafka的工作方式对设计进行优化。 您无需设置   建立任何特殊的Kafka Streams集群,并且没有集群   。如果您需要做一个简单的Kafka主题到主题   转换,按键计数元素,用来自   另一个主题,或者进行汇总或仅进行实时处理-   Kafka Streams适合您。

     

如果事件时间无关紧要,并且延迟时间在秒范围内   可以接受,Spark是首选。它很稳定,几乎任何   系统类型可以轻松集成。另外它附带   每个Hadoop发行版。此外,用于批处理的代码   应用程序还可以用于流式应用程序,因为   API是相同的。

Kafka可以轻松地在单个主题中处理多个源,但是Spark中的相同处理起来很复杂。但是在Kafka的帮助下,它变得非常简单。

链接参考:https://dzone.com/articles/spark-streaming-vs-kafka-stream-1