1

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

谢谢

4

3 回答 3

2

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

Spark Streaming 和其他流媒体环境专为即时读取数据而设计。在阅读过程之后,他们没有太多能力保持数据活着。(其中一些有,但效率不高)。顺便说一句,需要像 Kafka 这样的消息代理来让数据在特定时间内保持活动状态。因此,其他工具可以随时通过使用消费者轻松地从消息代理(Kafka)中获取数据。划分职责会给你带来有效的结果。

于 2016-02-05T10:21:57.237 回答
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。

在流式传输案例中,火花支持来自不同来源的数据,例如

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

Spark 也支持简单的套接字流,

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

更多

Kafka 是一个高吞吐量的分布式消息系统。Kafka 的分布式行为、可扩展性和容错性比其他消息传递系统具有优势。(MQTT、ZMQ 等)

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

于 2016-01-11T09:23:42.120 回答
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 介于数据源和 spark-streaming 之间?

根据场景的不同,Kafka 通常是存储数据然后从不同方面消费的合适选择。

于 2017-11-18T00:12:59.253 回答