标签归档:streaming

RSS feed of streaming

Spark 异常 requirement failed: numRecords must not be negative

问题描述

SparkStreaming 报错:

Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: numRecords must not be negative

按字面意思理解,说是传入的偏移量是负数,但经过检查其实并没有赋任何负数给偏移量。昨天还跑的好好的程序今天怎么就不行了呢?然而重启并不能解决这个问题,只能研究一下了。根据提示猜想可能是 kafka topic 的 offset 越界导致的问题, 按照这个思路最后查到了原因:

log.retention.hours=24 (The minimum age of a log file to be eligible for deletion) 因此,应该是 kafka 中未被消费的数据被 broker 清除了,使得 zk 中的 offset 落在仍存在的最老 message offset 的左侧,本来合法的 offset变得不非法了。

在我的配置文件中 kafka/config/server.properties :

log.retention.hours=168

设置的时间是 168 小时( 7 天),项目里的这个 topic 从创建到今天已经超过 7 天,所以踩到了这个坑。

解决办法:

  • 及时消费掉目标 topic 中的数据,并且消费延时不能大于 log.retention.hours 的配置;
  • 为这个异常做容错处理,能让 job 继续执行。

Done.

本文链接:/2018/05/27/result-spark-requirement-failed-numrecords-must-not-be-negative/
请尊重作者的劳动成果,转载请注明出处!Sakishum 博客保留对文章的所有权利。