我对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")
- 将您的逻辑应用于生成的RDD
在流媒体情况下,激发来自不同来源(如)的支持数据
Kafka、Flume、Kinesis、Twitter、ZeroMQ、MQTT等
和Spark支持简单的套接字流也,
val lines=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
若您的用例足够简单,可以从文件中读取,我会选择apachenifi。
https://www.youtube.com/watch?v=gqV_63a0ABo&list=PLzmB162Wvzr05Pe-lobQEZkk0zXuzms56
换句话说,为什么卡夫卡介于数据源和火花流?
根据场景的不同,Kafka通常是存储数据然后从不同方面进行消费的合适选择。