小编Dan*_*Ahn的帖子

Spark Structured Streaming with Kafka 不支持startingOffset="earliest"

我已经设置了 Spark Structured Streaming (Spark 2.3.2) 来读取 Kafka (2.0.0)。如果消息在 Spark 流作业开始之前进入主题,我将无法从主题的开头开始消费。Spark 流的这种预期行为是否会忽略在 Spark Stream 作业初始运行之前生成的 Kafka 消息(即使使用 .option("stratingOffsets","earliest"))?

重现步骤

  1. 在开始流式作业之前,创建test主题(单个代理、单个分区)并向该主题生成消息(在我的示例中为 3 条消息)。

  2. 使用以下命令启动 spark-shell: spark-shell --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.2.3.1.0.0-78 --repositories http://repo.hortonworks.com/content/repositories/releases/

  3. 执行下面的 spark scala 代码。

// Local
val df = spark.readStream.format("kafka")
  .option("kafka.bootstrap.servers", "localhost:9097")
  .option("failOnDataLoss","false")
  .option("stratingOffsets","earliest")
  .option("subscribe", "test")
  .load()

// Sink Console
val ds = df.writeStream.format("console").queryName("Write to console")
  .trigger(org.apache.spark.sql.streaming.Trigger.ProcessingTime("10 second"))
  .start()
Run Code Online (Sandbox Code Playgroud)

预期与实际输出

我希望流从 offset=1 开始。但是,它从 offset=3 开始读取。可以看到kafka客户端实际上是在重置起始偏移量:2019-06-18 21:22:57 INFO Fetcher:583 - [Consumer clientId=consumer-2, groupId=spark-kafka-source-e948eee9-3024-4f14-bcb8-75b80d43cbb1--181544888-driver-0] Resetting offset for partition test-0 to …

apache-spark spark-streaming spark-structured-streaming spark-streaming-kafka

8
推荐指数
1
解决办法
4083
查看次数