confd java_Spark Streaming:打印JavaInputDStream

该博客讲述了作者在使用Spark Streaming和Kafka集成时遇到的问题。作者通过Java代码创建了一个Spark Streaming应用,从Kafka主题中订阅消息,但不清楚如何在命令行上正确输出消息。他们尝试使用`print()`函数,但只看到了作业调度信息,而非实际消息内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前我正在使用Spark Streaming以及从Kafka读取消息的可能性 . 使用Kafka Producer,我将消息发送到主题,并希望在Spark Streaming的帮助下阅读此主题 .

我使用以下Java代码来查询消息:

package apache_spark_streaming;

import java.util.*;

import org.apache.spark.SparkConf;

import org.apache.spark.streaming.Durations;

import org.apache.spark.streaming.api.java.JavaInputDStream;

import org.apache.spark.streaming.api.java.JavaStreamingContext;

import org.apache.spark.streaming.kafka010.*;

import org.apache.kafka.clients.consumer.ConsumerRecord;

public final class Spark_Kafka_Example {

private static final String BOOTSTRAP_SERVERS_CONNECTION = "XXXXX";

private static final String SPARK_CONNECTION = "spark://XXXXX:7077";

private static final String TOPIC_NAME = "KafkaTesting1";

private static final Set TOPIC_1 = new HashSet<>(Arrays.asList(TOPIC_NAME.split(",")));

public static Map getProperties() {

try {

Map kafkaParams = new HashMap<>();

kafkaParams.put("bootstrap.servers", BOOTSTRAP_SERVERS_CONNECTION);

kafkaParams.put("key.deserializer", org.apache.kafka.common.serialization.StringDeserializer.class.getName());

kafkaParams.put("value.deserializer", org.apache.kafka.common.serialization.StringDeserializer.class.getName());

kafkaParams.put("group.id", "Stream Testing");

kafkaParams.put("auto.offset.reset", "earliest");

kafkaParams.put("enable.auto.commit", false);

return kafkaParams;

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static void main(String[] args) throws Exception {

// Create context with a 2 seconds batch interval

SparkConf sparkConf = new SparkConf().setAppName("Kafka Example").setMaster(SPARK_CONNECTION);

JavaStreamingContext sc = new JavaStreamingContext(sparkConf, Durations.seconds(2));

JavaInputDStream> stream = KafkaUtils.createDirectStream(

sc

, LocationStrategies.PreferConsistent()

, ConsumerStrategies.Subscribe(TOPIC_1, getProperties())

);

stream.print();

sc.start();

sc.awaitTermination();

}

}

我的问题是我不知道如何在命令行上输出消息 . 也许我只有一个理解问题如何正确使用JavaInputDStreams .

目前我只使用print()函数作为输出:

17/07/10 16:59:20 INFO JobScheduler:添加了1499698760000 ms的工作时间

我希望你能帮我解决这个“问题” .

Updated 我试过了

stream.foreachRDD(consumerRecordJavaRDD -> {

consumerRecordJavaRDD.foreach(stringStringConsumerRecord -> {

//.to get topic name: stringStringConsumerRecord.topic()

//To get value : stringStringConsumerRecord.value()

} }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值