最近在用spark-streaming-kafka遇到的问题
问题1
There are some messages whose size is larger than the fetch size 1048576 and hence cannot be ever returned. Increase the fetch size, or decrease the maximum message size the broker will allow.
解决方案
修改ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG(fetch.message.max.bytes)设置个较大的值。
问题2
问题描述:当kafka中存在大量未消费的消息时
当我们提交spark-streaming程序消费kafka中的消息时,若kafka中存在大量未消费的消息,首个batch要处理大量的消息,会导致spark-submit设置的资源无法满足大量消息的处理而导致崩溃。因此在spark-submit启动的时候多加了一个配置:--conf spark.streaming.kafka.maxRatePerPartition=10000。限制每秒钟从topic的每个partition最多消费的消息条数,这样就把首个batch的大量的消息拆分到多个batch中去了,为了更快的消化掉delay的消息,可以调大计算资源和把这个参数调大。
spark executor
Executor是spark任务(task)的执行单元,运行在worker上,但是不等同于worker,实际上它是一组计算资源(cpu核心、memory)的集合。一个worker上的memory、cpu由多个executor共同分摊。