我对Kafka / Spark-Streaming没有多少经验,但我已经阅读了很多关于组合在构建分析/仪表板实时系统方面有多棒的文章。有人可以向我解释为什么火花流不能单独做到吗?换句话说,为什么Kafka介于数据源和spark-streaming之间?
由于
答案 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")
在流媒体案例中,火花支持来自不同来源的数据,如
Kafka,Flume,Kinesis,Twitter,ZeroMQ,MQTT等。
Spark也支持简单的socket Streaming,
val lines = ssc.socketTextStream(" localhost",9999)
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通常适合存储数据,然后从不同方面消费。