问题
有Apachespark应用程序试图从ApacheKafka源码获取消息kafkashaded.org.apache.kafka.clients.consumer.OffsetOutOfRangeException报错消息
因果
Spark程序试图从Kafka获取过期数据偏移
通常我们在两种假设中都看到这一点:
假想一
Spark程序处理数据时终止重新激活Spark应用时,它试图获取基于先前计算数据偏移的数据如果数据偏移在Spark应用终止期间过期,问题可能发生
假想2
保留策略定时短于处理批量所需时间批处理时 卡夫卡偏移部分过期偏差计算下一批,如果检查站元数据因过期偏差出现错位,问题就可能发生
求解
假想1-选项1
重开spark应用前删除现有检查站新建检查站加插新取偏移细节
偏差在于某些数据可能被忽略, 因为偏差在卡夫卡过期
假想1-选项2
增加Kafka保留专题策略,使其长于Spark应用离线时间
无漏数据解决方案,因为在spark应用重新启动前没有偏差过期
保留策略有两种类型:
- 时间保留类型策略定义时间保留日志段后自动删除默认时间基数据保留窗口所有题目为7天可审查Kafka文档log.retention.hours,log.retention.minutes并log.retention.ms获取更多信息
- 大小保留类型策略定义数据保留量限值按区划分默认值无限化可审查Kafka文档log.retention.bytes获取更多信息
卡夫卡评论主题级配置获取更多资料说明如何设置专题重置
假想2-选项1
增加分区保留策略实现方式与解决方式相同假想1-选项2.
假想2-选项2
通过配置增加并行工数.option("minPartitions",
选项最小片段定义最小分区从Kafka读取默认时 Spark使用一对一映射卡夫卡主题分区Spark分区if设置选项最小片段值大于您的Kafka专题分区数,Spark将Kafka专题分区分割成小块
此选项推荐时数据斜率、峰值加载值和流下降置值大于默认结果卡夫卡消费者启动连接Kafka时使用SSL可影响性能