Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将Apache Spark结果发布到另一个应用程序/Kafka_Apache Spark_Apache Kafka_Apache Storm_Spark Streaming - Fatal编程技术网

Apache spark 将Apache Spark结果发布到另一个应用程序/Kafka

Apache spark 将Apache Spark结果发布到另一个应用程序/Kafka,apache-spark,apache-kafka,apache-storm,spark-streaming,Apache Spark,Apache Kafka,Apache Storm,Spark Streaming,我目前正在设计一个快速数据聚合模块,它接收事件并将它们发布到Kafka集群。然后我们整合了卡夫卡和火花流。Spark Streaming从Kafka读取流并执行一些计算。计算完成后,我们需要将结果发送到另一个应用程序。此应用程序可以是web服务或Kafka群集 我想知道我们怎样才能做到这一点?据我所知,Spark Stream将数据推送到下游,如数据库和文件系统 您将如何设计这样一个应用程序?我是否应该用Storm替换Spark Stream以将结果发布到另一个应用程序 请参阅dstream.f

我目前正在设计一个快速数据聚合模块,它接收事件并将它们发布到Kafka集群。然后我们整合了卡夫卡和火花流。Spark Streaming从Kafka读取流并执行一些计算。计算完成后,我们需要将结果发送到另一个应用程序。此应用程序可以是web服务或Kafka群集

我想知道我们怎样才能做到这一点?据我所知,Spark Stream将数据推送到下游,如数据库和文件系统


您将如何设计这样一个应用程序?我是否应该用Storm替换Spark Stream以将结果发布到另一个应用程序

请参阅
dstream.foreachRDD
,它是一种功能强大的原语,可以将数据发送到外部系统。

下面是我的kafka集成代码供您参考(未优化,仅用于POC,KafkaProducer对象可在foreachRDD中重复使用)):

我想知道我们怎样才能做到这一点?据我所知,Spark Stream将数据推送到下游,如数据库和文件系统

Spark不限于HDF或数据库,您可以自由初始化与任何可用外部资源的连接。它可以返回到Kafka、RabbitMQ或Web服务

如果您正在执行简单的转换,如
map
filter
reduceByKey
等,那么使用
DStream.foreachRDD
就可以了。如果要进行有状态计算,如
DStream.mapWithState
,那么一旦处理完状态,就可以将数据发送到任何外部服务

例如,我们使用Kafka作为数据的输入流,在进行一些有状态计算之后使用RabbitMQ和输出

DStream.foreachRDD(rdd => {
      rdd.foreachPartition { partitionOfRecords =>
        val kafkaProps = new Properties()
        kafkaProps.put("bootstrap.servers", props("bootstrap.servers"))
        kafkaProps.put("client.id", "KafkaIntegration Producer");
        kafkaProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        kafkaProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        val producer = new KafkaProducer[String, String](kafkaProps);

        partitionOfRecords.foreach(record => {
        val message = new ProducerRecord[String, String]("hdfs_log_test", record.asInstanceOf[String])
          producer.send(message)
        })
        producer.close()
      }
    })