繁体   English   中英

Spark 设置为从最早的偏移量读取 - 在尝试使用 Kafka 上不再可用的偏移量时抛出错误

[英]Spark set to read from earliest offset - throws error on attempting to consumer an offset no longer available on Kafka

我目前正在 Dataproc 上运行 spark 作业,在尝试重新加入组并从 kafka 主题读取数据时遇到错误。 我做了一些挖掘,但不确定问题出在哪里。 我将auto.offset.reset设置为earliest ,因此它应该从最早可用的未提交偏移量读取,最初我的火花日志如下所示:

19/04/29 16:30:30 INFO     
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-11 to offset 5553330.
19/04/29 16:30:30 INFO     
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-2 to offset 5555553.
19/04/29 16:30:30 INFO 
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-3 to offset 5555484.
19/04/29 16:30:30 INFO 
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-4 to offset 5555586.
19/04/29 16:30:30 INFO 
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-5 to offset 5555502.
19/04/29 16:30:30 INFO 
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-6 to offset 5555561.
19/04/29 16:30:30 INFO 
org.apache.kafka.clients.consumer.internals.Fetcher: [Consumer 
clientId=consumer-1, groupId=demo-group] Resetting offset for 
partition demo.topic-7 to offset 5555542.```

但是接下来的一行我在尝试从服务器上不存在的偏移量中读取时遇到错误(您可以看到分区的偏移量与上面列出的不同,所以我不知道为什么它会尝试读取表单该偏移量,这是下一行的错误:

org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets 
out of range with no configured reset policy for partitions: 
{demo.topic-11=4544296}

关于为什么我的 spark 作业不断回到此偏移量 (4544296) 而不是它最初输出的偏移量 (5553330) 的任何想法?

它似乎自相矛盾 wa) 它说的实际偏移量和它试图读取的偏移量和 b) 说没有配置的重置策略

这个答案晚了一年,但希望能帮助其他面临类似问题的人。

通常,当消费者尝试读取 Kafka 主题中不再存在的偏移量时,就会显示此行为。 偏移量不再存在,通常是因为它已被 Kafka Cleaner 删除(例如,由于保留或压缩策略)。 但是,Kafka 仍然知道 Consumer Group,并且 Kafka 为主题“demo.topic”及其所有分区保留了组“demo-group”的最新消费消息的信息。

因此, auto.offset.reset配置没有任何影响,因为不需要重置。 相反,Kafka 知道消费者组。

此外, Fetcher只告诉您主题的每个分区内的最新可用偏移量。 并不自动意味着它实际轮询直到该偏移量的所有消息。 Spark 决定它实际为每个分区消耗和处理多少消息(基于例如配置maxRatePerPartition )。

要解决此问题,您可以更改消费者组(在这种特定情况下可能不是您想要的)或通过使用手动重置消费者组“demo-group”的偏移量

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --reset-offsets --group demo-group --topic demo.topic --partition 11 --to-latest

根据您的要求,您可以使用该工具为主题的每个分区重置偏移量。 帮助功能或文档解释了所有可用选项。

暂无
暂无

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

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