如何使用直接流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");
答案 0 :(得分:5)
直接流API使用低级Kafka API,因此无论如何也不会使用消费者群组。如果您想将消费者群体与Spark Streaming一起使用,您将不得不使用基于接收器的API。
答案 1 :(得分:0)
createDirectStream
中的 spark-streaming-kafka-0-8
不支持群组模式,因为它使用的是低级Kafka API。
但是spark-streaming-kafka-0-10
支持分组模式。
在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
中测试了分组模式,它确实可以工作。