3

我已经使用 createDirectStream 实现了 Spark Streaming。我的 Kafka 生产者每秒向具有两​​个分区的主题发送几条消息。

在 Spark 流方面,我每秒读取一次 kafka 消息,并且我将它们以 5 秒的窗口大小和频率窗口化。

Kafka 消息得到了正确处理,我看到了正确的计算和打印。

但在 Spark Web UI 中,在 Streaming 部分下,每个窗口的事件数显示为零。请看这张图片:

显示零事件的 Spark UI

我很困惑为什么它显示为零,它不应该显示被馈送到 Spark Stream 的 Kafka 消息的数量吗?

更新:

当我使用 groupByKeyAndWindow() api 时,似乎发生了这个问题。当我从我的代码中注释掉这个 api 使用时,Spark Streaming UI 开始正确报告 Kafka 事件输入大小。

知道为什么会这样吗?这可能是 Spark Streaming 的缺陷吗?

我正在使用 Cloudera CDH:5.5.1,Spark:1.5.0,Kafka:KAFKA-0.8.2.0-1.kafka1.4.0.p0.56

在此处输入图像描述

4

1 回答 1

0

Spark Kafka库代码似乎没有记录它。

基于代码Spark 2.3.1

  1. 搜索Input Size / Records,发现是stageData.inputBytes(StagePage.scala)的值
  2. 搜索StageDataand inputBytes,发现是metrics.inputMetrics.bytesRead(LiveEntity.scala)的值
  3. 搜索bytesRead,发现它设置在HadoopRDD.scala,FileScanRDD.scalaShuffleSuite.scala。但不在任何与 Kafka 相关的文件中。
于 2018-08-26T12:02:27.100 回答