我是spark和kafka的新手,我和kafka的火花流的使用模式略有不同。 我正在使用
spark-core_2.10 - 2.1.1
spark-streaming_2.10 - 2.1.1
spark-streaming-kafka-0-10_2.10 - 2.0.0
kafka_2.10 - 0.10.1.1
正在将连续事件数据流式传输到kafka主题,我需要从多个火花流应用程序处理该主题。但是当我运行spark streaming应用程序时,只有其中一个接收数据。
Map<String, Object> kafkaParams = new HashMap<String, Object>();
kafkaParams.put("bootstrap.servers", "localhost:9092");
kafkaParams.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
kafkaParams.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
kafkaParams.put("auto.offset.reset", "latest");
kafkaParams.put("group.id", "test-consumer-group");
kafkaParams.put("enable.auto.commit", "true");
kafkaParams.put("auto.commit.interval.ms", "1000");
kafkaParams.put("session.timeout.ms", "30000");
Collection<String> topics = Arrays.asList("4908100105999_000005");;
JavaInputDStream<ConsumerRecord<String, String>> stream = org.apache.spark.streaming.kafka010.KafkaUtils.createDirectStream(
ssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<String, String> Subscribe(topics, kafkaParams) );
... //spark processing
我有两个火花流应用程序,通常是我提交的第一个使用kafka消息。第二个应用程序只是等待消息而永远不会继续。 正如我所读到的,kafka主题可以从多个消费者订阅,对于火花流是不是真的?或者kafka主题及其配置中缺少一些内容?
提前致谢。
答案 0 :(得分:1)
您可以使用相同的groupid创建不同的流。以下是0.8集成在线文档的更多细节,有两种方法:
方法1:基于接收者的方法
可以使用不同的组创建多个Kafka输入DStream 使用多个接收器并行接收数据的主题。
方法2:直接接近(无接收者)
无需创建多个输入Kafka流并将它们联合起来。同 directStream,Spark Streaming将创建尽可能多的RDD分区 有消耗的Kafka分区,它们都会从中读取数据 卡夫卡并行。所以卡夫卡和卡夫卡之间有一对一的映射 RDD分区,更容易理解和调整。
您可以在Spark Streaming + Kafka Integration Guide 0.8
了解更多信息从您的代码看起来您使用的是0.10,请参阅Spark Streaming + Kafka Integration Guide (Kafka broker version 0.10.0
即使认为它正在使用spark streaming api,一切都由kafka属性控制,因此取决于您在属性文件中指定的组ID,您可以启动具有不同组ID的多个流。
干杯!
答案 1 :(得分:1)
消费者数量[在消费者群体下],不能超过主题中的分区数量。如果要并行使用消息,则需要引入适当数量的分区并创建接收器来处理每个分区。