我是Spark的新人,因为提出这样的问题而道歉。我有一个用例,我想在Spark Streaming的帮助下从主题的特定分区读取数据。我正在使用 Spark Java API 来完成所有工作。
我创建了一个名为test的主题,其中包含复制因子2和5个分区。希望在Spark流式传输Kafka集成指南的帮助下,我能够完成诸如创建JavaStreamingContext对象,创建到Kafka代理的直接流以及能够从所有分区读取所有消息的所有内容。
但是我的用例仍然没有实现,我只需要读取Kafka代理中某个主题的特定分区的消息,而不是所有分区的所有消息。
答案 0 :(得分:1)
您应该能够使用以下代码从特定偏移量中读取特定分区。
Map<TopicAndPartition, Long> consumerOffsets = new HashMap<TopicAndPartition, Long>();
TopicAndPartition p1 = new TopicAndPartition("yourtopic","yourpartition");
consumerOffsets.put(p1,offset);
JavaInputDStream<String> messages = KafkaUtils.createDirectStream(
jssc,
String.class,
String.class,
StringDecoder.class,
StringDecoder.class,
String.class,
kafkaParams,
consumerOffsetsLong,
new Function<MessageAndMetadata<String, String>, String>() {
public String call(MessageAndMetadata<String, String> msgAndMeta) throws Exception {
return msgAndMeta.message();
}
}
);