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