卡夫卡很常见。许多公司都在使用它。我完全了解Kafka和Spark的工作方式,并且我对两者都有经验。我不明白的是用例。为什么您将Kafka与Spark一起使用,而不仅仅是Spark?
如我所见,Kafka的主要用途是作为ETL管道中用于实时(流)数据的暂存区域。
我想象有一个数据源集群,数据最初存储在其中。例如,Vertica,Cassandra,Hadoop等。
然后有一个处理集群,该集群从数据源集群读取数据,并将其写入分布式Kafka日志,该日志基本上是分段数据集群。
然后有另一个处理集群-Spark集群,它从Kafka读取数据,对数据进行一些转换和聚合,然后将其写入最终目标。
如果我想像的是正确的,我可以从中间切开Kafka,然后在运行于Spark集群上的Spark程序中,驱动程序将从原始源读取数据并将其并行化以进行处理。将卡夫卡放在中间的好处是什么?
您能给我具体的用例吗,其中Kafka会有所帮助,而不是首先不通过Kafka而仅将数据读取到Spark吗?
答案 0 :(得分:0)
Kafka Streams直接解决了流处理中的许多难题:
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