为什么不单独使用spark-streaming

时间:2016-01-10 20:05:06

标签: real-time apache-kafka spark-streaming lambda-architecture

我对Kafka / Spark-Streaming没有多少经验,但我已经阅读了很多关于组合在构建分析/仪表板实时系统方面有多棒的文章。有人可以向我解释为什么火花流不能单独做到吗?换句话说,为什么Kafka介于数据源和spark-streaming之间?

由于

3 个答案:

答案 0 :(得分:2)

实际上这个问题有一个简单的解释。

Spark Streaming和其他流媒体环境旨在立即读取数据。 在阅读过程之后,他们没有太多能力保持数据存活。(其中一些有,但效率不高)。顺便说一下,像Kafka这样的消息代理需要在特定时间保持数据存活。 因此,其他工具可以通过使用消费者随时轻松地从消息代理(Kafka)获取数据。 分工负责将为您带来有效的结果。

答案 1 :(得分:0)

为了使用Spark处理数据,我们需要通过Spark支持的不同数据源提供数据。 (或者我们需要编写自己的自定义数据源)

如果是静态数据,则spark提供

  sc.textFile("FILE PATH") //For reading text file
  sc.wholeTextFiles("DIRECTORY PATH") //For reading whole text files in a directory
  sqlContext.read.parquet("FILE PATH")
  sqlContext.read.json("FILE PATH")
  1. 在生成的RDD上应用您的逻辑。
  2. 在流媒体案例中,火花支持来自不同来源的数据,如

    Kafka,Flume,Kinesis,Twitter,ZeroMQ,MQTT等。

    Spark也支持简单的socket Streaming,

    val lines = ssc.socketTextStream(" localhost",9999)

    For more

    Kafka是一种高吞吐量的分布式邮件系统。 Kafka的分布式行为,可伸缩性和容错性优于其他消息传递系统。 (MQTT,ZMQ等)

    所以这些数据来源中哪一个是你的? 您可以用自己的kafka数据源替换kafka数据源。我们使用MQTT作为默认源。

答案 2 :(得分:0)

  

有人可以向我解释为什么火花流不能独自完成吗?

Spark流媒体适用于实时数据,需要从某个地方提取数据。像Kafka,Flume,Kinesis或TCP套接字。即使你可以从文件中读取数据。

https://spark.apache.org/docs/latest/streaming-programming-guide.html

如果你的用例很简单,可以从文件中读取,我会说要去apache nifi。

https://www.youtube.com/watch?v=gqV_63a0ABo&list=PLzmB162Wvzr05Pe-lobQEZkk0zXuzms56

  

换句话说,为什么Kafka介于数据源和   火花流?

根据情况,Kafka通常适合存储数据,然后从不同方面消费。