Apache Kafka 和 Spark Streaming

Apache Kafka and Spark Streaming

我正在通读这个博客 post:

http://blog.jaceklaskowski.pl/2015/07/20/real-time-data-processing-using-apache-kafka-and-spark-streaming.html

它讨论了如何使用 Spark Streaming 和 Apache Kafka 进行一些近乎实时的处理。我完全理解这篇文章。它确实展示了我如何使用 Spark Streaming 从主题中读取消息。我想知道是否有 Spark Streaming API 可用于将消息写入 Kakfa 主题?

我的用例非常简单。我有一组数据,我可以以固定的时间间隔(比如每秒)从给定的来源读取这些数据。我使用反应流来做到这一点。我想使用 Spark 对此数据进行一些分析。我想要容错,所以 Kafka 发挥了作用。所以我基本上要做的是以下内容(如果我错了请纠正我):

  1. 使用反应流以恒定间隔从外部源获取数据
  2. 将结果通过管道传输到 Kafka 主题中
  3. 使用 Spark Streaming,为消费者创建流上下文
  4. 对消耗的数据进行分析

另一个问题是,Spark 中的 Streaming API 是反应流规范的实现吗?它有背压处理(Spark Streaming v1.5)吗?

  1. 不,目前 none 的 Spark Streaming 内置接收器 API 是 Reactive Streams 实现的实现。但是有一个 issue for that 你会想要关注。
  2. 但 Spark Streaming 1.5 has internal back-pressure-based dynamic throttling. There's some work to extend that beyond throttling 正在筹备中。此节流与 Kafka 直接流 API.

  3. 兼容
  4. 您可以在 Spark Streaming 应用程序中写入 Kafka,这里是 one example

(完全披露:我是一些背压工作的 implementers 之一)

如果您必须将结果流写入另一个 Kafka 主题,比如 'topic_x',首先,您必须在结果流中包含名称为 'Key' 和 'Value' 的列您正在尝试写入 topic_x.

result_stream = result_stream.selectExpr('CAST (key AS STRING)','CAST (value AS STRING)')
kafkaOutput = result_stream \
               .writeStream \
               .format('kafka') \
               .option('kafka.bootstrap.servers','192.X.X.X:9092') \
               .option('topic','topic_x') \
               .option('checkpointLocation','./resultCheckpoint') \
               .start()

kafkaOutput.awaitTermination()

有关详细信息,请查看 https://spark.apache.org/docs/2.4.1/structured-streaming-kafka-integration.html

上的文档