要消费kafka消息并避免使用参数"kafka.bootstrap.servers",可以使用以下代码示例:
import org.apache.spark.streaming.kafka010._
import org.apache.kafka.common.serialization.StringDeserializer
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092", // Kafka broker地址
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "spark-consumer-group", // 消费者组ID
"auto.offset.reset" -> "latest", // 从最新的偏移量开始消费
"enable.auto.commit" -> (false: java.lang.Boolean) // 不自动提交偏移量
)
val topics = Array("topic1", "topic2") // 要消费的主题
val kafkaStream = KafkaUtils.createDirectStream[String, String](
streamingContext,
LocationStrategies.PreferConsistent,
ConsumerStrategies.Subscribe[String, String](topics, kafkaParams)
)
kafkaStream.foreachRDD { rdd =>
// 在这里处理接收到的消息
rdd.foreach { record =>
println(record.value())
}
}
这个示例使用了spark-streaming-kafka-0-10库的API来创建一个直接的Kafka流。它设置了一些必要的参数,如Kafka broker地址,消费者组ID等。然后,它使用KafkaUtils.createDirectStream
方法来创建一个直接的Kafka流,并订阅指定的主题。最后,通过kafkaStream.foreachRDD
方法来处理接收到的消息。
注意:在这个示例中,并没有使用参数"kafka.bootstrap.servers"来指定Kafka broker地址,而是将其作为一个Map传递给createDirectStream
方法。这样可以避免直接使用该参数来消费消息。