SparkStreaming之direct方式消费kafka数据偏移量相关问题
- direct方式支持不支持自动维护偏移量-----------不支持
- 那么看看direct方式消费时怎么判断偏移量的??
stream = KafkaUtils.createDirectStream(
jssc,
ConsumerStrategies.Subscribe(
// topcics xxx
KafKaUtil.getParams())
);
- 看看ConsumerStrategies.Subscribe的源码
def Subscribe[K, V](
topics: ju.Collection[jl.String],
kafkaParams: ju.Map[String, Object]): ConsumerStrategy[K, V] = {
new Subscribe[K, V](topics, kafkaParams, ju.Collections.emptyMap[TopicPartition, jl.Long]())
}
可以很明显看到 并没有指定偏移量,但是源码里面会new Subscribe指定一个空的map当作默认偏移量
- 看看new Subscribe[K,V]中关于offset的描述
@param offsets: offsets to begin at on initial startup. If no offset is given for a
* TopicPartition, the committed offset (if applicable) or kafka param
* auto.offset.reset will be used.
这个offset代表的就是初始启动时偏移量,如果没有提供对于各分区的偏移量记录, kafka的参数auto.offset.reset将会起作用
总结: 如果各个分区有自己维护偏移量,那么就从自己维护的偏移量消费;如果各个分区没有自己维护偏移量,那么就会参考auto.offset.reset的值进行消费
有关auto.offset.reset的相关信息,请参阅下篇文章
auto.offset.reset参数详解