写在前面:通过spark-streaming消费kafka,spark 1.6.2 kafka 0.9;spark-streaming 1.6 默认整合kafka0.8;尝试过单独整合kafka0.9 不成功(java.lang.ClassCastException: kafka.cluster.BrokerEndPoint cannot be cast to kafka.cluster.Broker),需要记录起始offset,但是第一次执行程序的时候并没有这个值,而且如果数据量太大也可能不需要完全从头开始;spark-streaming在初始化的时候必要要传入topic的所有partition-offset信息,如果Kafka分区信息变更也需要直接从Kafka读取相关信息。
一、kafka 0.8 以前的版本:(不需要任何配置,通过SimpleConsumer)
//通过任意节点创建SimpleConsumer
val sc = new SimpleConsumer("hdpb52.hdbp.com",6667,10000,64*1024,"")
//获取TopicMetadata信息
val tmr = sc.send(new TopicMetadataRequest(Seq(topic),0))
var resp = tmr.topicsMetadata.flatMap(tm => {
tm.partitionsMetadata.map(p => (tm.topic,p.partitionId, p.leader.get))
}).map(t => {
//通过leader创建SimpleConsumer
val c = new Si