我没有太多使用 Kafka/Spark-Streaming 的经验,但我读过很多关于该组合在构建用于分析/仪表板的实时系统方面有多棒的文章。有人可以向我解释为什么火花流不能单独完成吗?换句话说,为什么 Kafka 介于数据源和 spark-streaming 之间?
谢谢
我没有太多使用 Kafka/Spark-Streaming 的经验,但我读过很多关于该组合在构建用于分析/仪表板的实时系统方面有多棒的文章。有人可以向我解释为什么火花流不能单独完成吗?换句话说,为什么 Kafka 介于数据源和 spark-streaming 之间?
谢谢
其实这个问题有一个简单的解释。
Spark Streaming 和其他流媒体环境专为即时读取数据而设计。在阅读过程之后,他们没有太多能力保持数据活着。(其中一些有,但效率不高)。顺便说一句,需要像 Kafka 这样的消息代理来让数据在特定时间内保持活动状态。因此,其他工具可以随时通过使用消费者轻松地从消息代理(Kafka)中获取数据。划分职责会给你带来有效的结果。
对于使用 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")
在流式传输案例中,火花支持来自不同来源的数据,例如
Kafka、Flume、Kinesis、Twitter、ZeroMQ、MQTT 等。
Spark 也支持简单的套接字流,
val 行 = ssc.socketTextStream("localhost", 9999)
Kafka 是一个高吞吐量的分布式消息系统。Kafka 的分布式行为、可扩展性和容错性比其他消息传递系统具有优势。(MQTT、ZMQ 等)
所以问题是在这些数据源中哪一个是你的?您可以用自己的替换 kafka 数据源。我们使用 MQTT 作为默认源。
有人可以向我解释为什么火花流不能单独完成吗?
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 通常是存储数据然后从不同方面消费的合适选择。