如何使用直接流在Kafka Spark Streaming中指定使用者组

时间:2016-04-08 20:13:30

标签: java apache-spark apache-kafka spark-streaming kafka-consumer-api

如何使用直接流API为kafka spark流指定使用者组ID。

HashMap<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", brokers);
kafkaParams.put("auto.offset.reset", "largest");
kafkaParams.put("group.id", "app1");

    JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(
            jssc, 
            String.class, 
            String.class,
            StringDecoder.class, 
            StringDecoder.class, 
            kafkaParams, 
            topicsSet
    );

虽然我已经指定配置不确定是否遗漏了什么。使用spark1.3

kafkaParams.put("group.id", "app1");

2 个答案:

答案 0 :(得分:5)

直接流API使用低级Kafka API,因此无论如何也不会使用消费者群组。如果您想将消费者群体与Spark Streaming一起使用,您将不得不使用基于接收器的API。

Full details are available in the doc !

答案 1 :(得分:0)

createDirectStream中的

spark-streaming-kafka-0-8不支持群组模式,因为它使用的是低级Kafka API。

但是spark-streaming-kafka-0-10支持分组模式。

Consumer Configs

  

在0.9.0.0中,我们引入了新的Java使用者,以替代旧的基于Scala的简单和高级使用者。新老消费者的配置如下所述。

New Consumer Configs中,有group.id项。

Spark Streaming integration for Kafka 0.10正在使用新的API。 https://spark.apache.org/docs/2.1.1/streaming-kafka-0-10-integration.html

  

针对Kafka 0.10的Spark Streaming集成在设计上与0.8 Direct Stream方法相似。它提供简单的并行性,Kafka分区和Spark分区之间的1:1对应关系以及对偏移量和元数据的访问。但是,由于较新的集成使用了新的Kafka消费者API而不是简单的API,因此用法上存在明显差异。

我已经在spark-streaming-kafka-0-10中测试了分组模式,它确实可以工作。