我有一个Spark Streaming应用程序,我必须订阅多个主题才能读取和处理数据。现在进行测试,我添加了两个主题。 但是我下面的代码仅从一个主题读取数据。我尝试过通过自定义代码以及通过Kafka消费者批处理文件发送数据。如果我为每个主题确定多个直接流,那么我就能从所有主题中读取内容。但是我有1000多个主题,所以我只想创建一个直接流并提供一个主题集。有人知道我可能在做什么错吗?
Collection<String> topicList = new ArrayList<>();
topicList.add("A");
topicList.add("B");
final JavaInputDStream<ConsumerRecord<String, String>> stream = KafkaUtils.createDirectStream(
streamingContext,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<
String, String> Subscribe(topicList, kafkaParams));
for(String topic:topicList)
{
JavaDStream<ConsumerRecord<String, String>> filteredStreams = stream.filter(msg -> {
return msg.topic().equals(topic);
});
JavaPairDStream<String, String> kafkaMessages = filteredStreams.mapToPair(new KafkaConsumerFunction());
process(kafkaMessages );
}