Kafka OffsetOutOfRangeException

时间:2017-04-18 20:42:44

标签: apache-spark apache-kafka spark-streaming

我通过kafka传输大量数据。然后我有火花流,消耗这些消息。基本上下线,火花流引发了这个错误:

kafka.common.OffsetOutOfRangeException

现在我知道这个错误意味着什么。所以我将保留政策更改为5天。但是我仍然遇到了同样的问题。然后我在kafka中使用--from-beginning列出了主题的所有消息。当然,从kafka流媒体部分开始的大量消息都不存在,因为火花流媒体有点落后于kafka流媒体部分,所以火花流媒体试图消耗已被kafka删除的消息。但是我认为更改保留策略会解决这个问题:

--add-config retention.ms=....

我怀疑kafka正在删除主题中的消息以释放新消息的空间(因为我们正在传输大量数据)。是否有一个我可以配置的属性,它指定kafka在删除先前消息之前可以存储多少字节的数据?

2 个答案:

答案 0 :(得分:0)

您可以使用主题配置属性retention.bytes通过控制台创建主题时设置主题的最大大小,如:

bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 1  --replication-factor 1 --config retention.bytes=10485760 --config

或者您可以使用全局代理配置属性log.retention.bytes来设置所有主题的最大大小。

重要的是要知道log.retention.bytes没有对主题大小强制实施硬限制,但它只是向Kafka发出信号,要求何时开始删除最旧的消息

答案 1 :(得分:0)

解决此问题的另一种方法是在配置中指定spark参数:

spark.streaming.kafka.maxRatePerPartition