KafkaUtils.createDirectStream的个人理解

近几日自己摸索的去看了一下kafka的一些特征,自己总结出来,加深一下印象
这是代码中创建一个对接kafkardd的方法
这个是sparkstreaming对接kafka,用direct方式消费数据的方法,点开这个方法看一下里面的描述
Create an input stream that directly pulls messages from Kafka Brokerswithout using any receiver. This stream can guarantee that each messagefrom Kafka is included in transformations exactly once (see points below)
这是源码里对方法的描述,它说会这个方法会创建一个直接从Kafka代理获取消息的输入流,不使用任何接受器。
下面还有一段对这句话的解释,说这个流会直接查询kafka的偏移量,不使用zk去保存偏移量,消耗跟踪偏移量依靠流自身。还强调了要从程序恢复故障,就要通过StreamingContext启动checkpointing,消耗的偏移量信息可以从checkpoint处恢复。


对于这段话,我有点不理解,忘大佬告知

KafkaUtils.createDirectStream的个人理解_第1张图片
这就是方法体

第一行创建了一个封装kafka数据的turple
第二行创建一个与kafka交互的对象,它会在kafkaParams参数里面去找"metadata.broker.list" 或者"bootstrap.servers"对应的服务器列表。
第三行会调用本类中的getFromOffects方法,根据参数来获取最新的或者是最早的偏移量

KafkaUtils.createDirectStream的个人理解_第2张图片
一进来先判断"auto.offset.reset"参数是否指定了从头消费,然后用一个循环去获取每个partition对应的偏移量,将分区与偏移量数据封装为一个map后返回。

第四行就是创建了一个类DirectKafkaInputDStream,这个类继承了InputDStream。
方法说明里面说一个rdd的partition会对应一个kafkapartition,而且可以通过spark.streaming.kafka.maxRatePerPartition配置来对每个partition进入的数据进行限流,防止有些机器 由于负载太高,而导致kafka传输数据出问题。
这个流根据KafkaUtils.getFromOffsets方法获取到的偏移量去初始化,并且它不会提交偏移量。

你可能感兴趣的:(KafkaUtils.createDirectStream的个人理解)