簡體   English   中英

如何在Kafka Direct Stream中使用Spark Structured Streaming?

[英]How to use Spark Structured Streaming with Kafka Direct Stream?

我遇到了使用Spark的Structured Streaming ,它有一個連續消耗S3存儲桶並將處理結果寫入MySQL數據庫的示例。

// Read data continuously from an S3 location
val inputDF = spark.readStream.json("s3://logs")

// Do operations using the standard DataFrame API and write to MySQL
inputDF.groupBy($"action", window($"time", "1 hour")).count()
       .writeStream.format("jdbc")
       .start("jdbc:mysql//...")

如何在Spark Kafka Streaming中使用它

val stream = KafkaUtils.createDirectStream[String, String](
  ssc,
  PreferConsistent,
  Subscribe[String, String](topics, kafkaParams)
)

有沒有辦法在不使用stream.foreachRDD(rdd => {})情況下組合這兩個示例?

有沒有辦法在不使用stream.foreachRDD(rdd => {})情況下組合這兩個示例?

還沒。 Spark 2.0.0沒有Kafka sink支持結構化流。 根據Tathagata Das ,Spark Streaming的創建者之一,這個功能應該在Spark 2.1.0中出現 以下是相關的JIRA問題

編輯:(29/11/2018)

是的,可以使用Spark 2.2版開始。

stream
  .writeStream // use `write` for batch, like DataFrame
  .format("kafka")
  .option("kafka.bootstrap.servers", "brokerhost1:port1,brokerhost2:port2")
  .option("topic", "target-topic1")
  .start()

查看此SO帖子(使用Spark流媒體讀取和寫入Kafka主題)了解更多信息。

編輯:(2016年12月6日)

結構化流的Kafka 0.10集成現在在Spark 2.0.2中支持expiramentaly

val ds1 = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .load()

ds1
  .selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
  .as[(String, String)]

我從Kafka的源代碼中讀到了一個類似的問題並寫入了Cassandra接收器。 在這里創建了一個簡單的項目kafka2spark2cassandra ,分享以防萬一它對任何人都有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM