Kafka + spark streaming:kafka.common.OffsetOutOfRangeException

时间:2017-09-15 17:28:39

标签: apache-spark pyspark apache-kafka spark-streaming kafka-consumer-api

我对整个Kafka / Spark事物都很陌生。我有Spark Streaming(PySpark)从Kafka制作人那里获取数据。它运行良好一分钟,然后总是抛出kafka.common.OffsetOutOfRangeException。 Kafka消费者版本为0.8(显然,PySpark不支持0.10)。我在AWS Ubuntu 14.04上有一个包含3名工作人员的主节点。我不知道这是否相关,但这里的Kafka日志相对较大(约1-10kb),我相应地调整了生产者/经纪人/消费者配置。数据正在通过罚款,但可能比我认为生产者可能生产的要慢(这可能是问题的根源?)。

通过在此处增加保留时间/尺寸来解决类似的问题:Kafka OffsetOutOfRangeException

但我的保留时间是一小时,每个节点server.properties的大小为1GB,更重要的是,Spark的故障时间和设置的保留时间/大小没有变化。

还有其他可能的调整,也许在Spark Streaming配置上?我在网上看到的所有答案都与Kafka配置有关,但它似乎并没有对我的情况产生影响。

编辑1:我尝试过a)从生产者那里读取多个流,b)用time.sleep(1.0)减慢生产者流本身的速度。两者都没有产生持久影响。

n_secs = 1
ssc = StreamingContext(sc, n_secs)
kds = [KafkaUtils.createDirectStream(ssc, ['test-video'], {
                    'bootstrap.servers':'localhost:9092', 
                    'group.id':'test-video-group', 
                    'fetch.message.max.bytes':'15728640',
                    'auto.offset.reset':'largest'}) for _ in range(n_streams)]

stream = ssc.union(*kds)

1 个答案:

答案 0 :(得分:0)

您的制作人是否有可能过快地生成过多的消息,以致每个代理的1G不够?在所有现实中,1G似乎都很低。在Spark Streaming决定它需要在微批处理中处理的偏移范围并尝试根据偏移量从代理检索消息之后,消息由于大小限制而消失。请将代理大小增加到100G之类的大小,看看是否能解决您的问题。