[英]Spark Structured Streaming - kafka offset handling
当我从最新的偏移量启动我的 Spark Structured Streaming 3.0.1 应用程序时,它运行良好。 但是当我想从一些较早的偏移量开始时——例如:
我可以在日志中看到起始偏移量被正确拾取,但是随后发生了一系列搜索(从我定义的位置开始),直到它达到当前的最新偏移量。
我删除了我的检查点目录并尝试了几个选项,但情况总是相同的 - 它报告正确的起始偏移量,但是需要很长时间才能慢慢寻找最新的并开始处理 - 知道为什么以及我应该另外查看?
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 获取的偏移量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.