繁体   English   中英

Spark Structured Streaming - kafka 偏移处理

[英]Spark Structured Streaming - kafka offset handling

当我从最新的偏移量启动我的 Spark Structured Streaming 3.0.1 应用程序时,它运行良好。 但是当我想从一些较早的偏移量开始时——例如:

  • 起始偏移量为“最早”
  • 起始偏移量到特定偏移量,例如 {"MyTopic-v1":{"0":1686734237}}

我可以在日志中看到起始偏移量被正确拾取,但是随后发生了一系列搜索(从我定义的位置开始),直到它达到当前的最新偏移量。

我删除了我的检查点目录并尝试了几个选项,但情况总是相同的 - 它报告正确的起始偏移量,但是需要很长时间才能慢慢寻找最新的并开始处理 - 知道为什么以及我应该另外查看?

2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786734237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786734737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786735237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786735737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786736237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786736737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786737237 for partition MyTopic-v1-0

我让应用程序运行了更长的时间,它最终开始生成文件,但我的 100 秒处理触发器没有得到满足,数据显示得更晚 - 20-30 分钟后。

(我也在 spark 2.4.5 上测试过——同样的问题——也许是一些 kafka 配置?)

如您所示,使用带有 JSON object 的选项startingOffsets应该可以正常工作。

您观察到的是,在应用程序第一次启动时,结构化流作业将读取所有(.)从提供的(1686734237)偏移量,直到主题中最后一个可用的偏移量。 由于这可能是相当多的消息,因此处理该大块将使第一个微批处理非常繁忙。

请记住, Trigger选项只定义了微批次的触发频率。 您应该确保将此触发率与预期的处理时间保持一致。 我在这里基本上看到两个选项:

  • 使用选项maxOffsetsPerTriger来限制每个触发器/微批次从 Kafka 获取的偏移量
  • 避免使用任何触发器,因为这将允许您的 stream 默认情况下在前一个触发器完成数据处理后立即触发

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM