Java 火花:从卡夫卡那里得到非常重要的信息
我正试图用卡夫卡的火花来接收非常重要的信息。 但spark似乎对可以阅读的信息的大小有一个限制。 我在kafka配置中进行了更改,以便能够使用和发送大消息,但这还不够(我认为这与spark有关,而不是与kafka有关),因为在使用kafka.consumer脚本时,显示消息内容没有任何问题 也许这与spark.streaming.kafka.consumer.cache.maxCapacity有关,但我不知道如何在基于spark java的程序中设置它 多谢各位 更新 我用它来连接卡夫卡,通常args[0]是zookeeper地址,args[1]是groupIDJava 火花:从卡夫卡那里得到非常重要的信息,java,apache-spark,apache-kafka,Java,Apache Spark,Apache Kafka,我正试图用卡夫卡的火花来接收非常重要的信息。 但spark似乎对可以阅读的信息的大小有一个限制。 我在kafka配置中进行了更改,以便能够使用和发送大消息,但这还不够(我认为这与spark有关,而不是与kafka有关),因为在使用kafka.consumer脚本时,显示消息内容没有任何问题 也许这与spark.streaming.kafka.consumer.cache.maxCapacity有关,但我不知道如何在基于spark java的程序中设置它 多谢各位 更新 我用它来连接卡夫卡,通常a
if (args.length < 4) {
System.err.println("Usage: Stream Car data <zkQuorum> <group> <topics> <numThreads>");
System.exit(1);
}
SparkConf sparkConf = new SparkConf().setAppName("stream cars data");
final JavaSparkContext jSC = new JavaSparkContext(sparkConf);
// Creer le contexte avec une taille de batch de 2 secondes
JavaStreamingContext jssc = new JavaStreamingContext(jSC,new Duration(2000));
int numThreads = Integer.parseInt(args[3]);
Map<String, Integer> topicMap = new HashMap<>();
String[] topics = args[2].split(",");
for (String topic: topics) {
topicMap.put(topic, numThreads);
}
JavaPairReceiverInputDStream<String, String> messages =
KafkaUtils.createStream(jssc, args[0], args[1], topicMap);
JavaDStream<String> data = messages.map(Tuple2::_2);
根据您使用的卡夫卡版本,您需要在卡夫卡配置文件中的
consumer.properties
文件中设置可用(或要创建)的以下使用者配置
对于0.8.X或更低版本
fetch.message.max.bytes
对于卡夫卡版本0.9.0或更高版本,设置
fetch.max.bytes
根据您的应用程序选择适当的值
例如,fetch.max.bytes=10485760
请参阅和。因此我找到了解决问题的方法,事实上,正如我在评论中所说,配置文件中的文件只是示例,在说明服务器时没有考虑它们。因此,消费者的所有配置,包括
fetch.message.max.bytes
都需要在消费者代码中完成
我就是这样做的:
if (args.length < 4) {
System.err.println("Usage: Stream Car data <zkQuorum> <group> <topics> <numThreads>");
System.exit(1);
}
SparkConf sparkConf = new SparkConf().setAppName("stream cars data");
final JavaSparkContext jSC = new JavaSparkContext(sparkConf);
// Creer le contexte avec une taille de batch de 2 secondes
JavaStreamingContext jssc = new JavaStreamingContext(jSC,new Duration(2000));
int numThreads = Integer.parseInt(args[3]);
Map<String, Integer> topicMap = new HashMap<>();
String[] topics = args[2].split(",");
for (String topic: topics) {
topicMap.put(topic, numThreads);
}
Set<String> topicsSet = new HashSet<>(Arrays.asList(topics));
Map<String, String> kafkaParams = new HashMap<>();
kafkaParams.put("metadata.broker.list", args[0]);
kafkaParams.put("group.id", args[1]);
kafkaParams.put("zookeeper.connect", args[0]);
kafkaParams.put("fetch.message.max.bytes", "1100000000");
JavaPairReceiverInputDStream<String, String> messages=KafkaUtils.createStream(jssc,
String.class,
String.class,
StringDecoder.class,
StringDecoder.class,
kafkaParams,
topicMap,MEMORY_ONLY() );
JavaDStream<String> data = messages.map(Tuple2::_2);
if(args.length<4){
System.err.println(“用法:流式车辆数据”);
系统出口(1);
}
SparkConf SparkConf=新的SparkConf().setAppName(“流式车辆数据”);
最终JavaSparkContext jSC=新的JavaSparkContext(sparkConf);
//Creer le contexte avec不需要2秒的批次
JavaStreamingContext jssc=新的JavaStreamingContext(jSC,新的持续时间(2000));
int numThreads=Integer.parseInt(args[3]);
Map topicMap=newhashmap();
字符串[]主题=args[2]。拆分(“,”;
for(字符串主题:主题){
put(主题,numThreads);
}
Set-topicsSet=newhashset(Arrays.asList(topics));
Map kafkaParams=新HashMap();
kafkaParams.put(“metadata.broker.list”,args[0]);
kafkaParams.put(“group.id”,args[1]);
kafkaParams.put(“zookeeper.connect”,args[0]);
kafkaParams.put(“fetch.message.max.bytes”,“1100000000”);
JavaPairReceiverInputStream消息=KafkaUtils.createStream(jssc,
String.class,
String.class,
StringDecoder.class,
StringDecoder.class,
卡夫卡帕拉姆斯,
topicMap,仅限内存();
JavaDStream data=messages.map(Tuple2::2);
您能否提供任何错误日志,帮助您声明“spark对可读取邮件的大小有限制”?此外,您是否使用spark streaming或结构化streaming从卡夫卡接收数据?您所说的spark streaming或结构化streaming是什么意思?我已经发布了代码,您可以从中找到答案。感谢您的帮助,请检查解决方案是否为您解决了问题!我已经定好了。但是我认为在配置文件中没有考虑这个文件。根据这个,这些文件只是示例
if (args.length < 4) {
System.err.println("Usage: Stream Car data <zkQuorum> <group> <topics> <numThreads>");
System.exit(1);
}
SparkConf sparkConf = new SparkConf().setAppName("stream cars data");
final JavaSparkContext jSC = new JavaSparkContext(sparkConf);
// Creer le contexte avec une taille de batch de 2 secondes
JavaStreamingContext jssc = new JavaStreamingContext(jSC,new Duration(2000));
int numThreads = Integer.parseInt(args[3]);
Map<String, Integer> topicMap = new HashMap<>();
String[] topics = args[2].split(",");
for (String topic: topics) {
topicMap.put(topic, numThreads);
}
Set<String> topicsSet = new HashSet<>(Arrays.asList(topics));
Map<String, String> kafkaParams = new HashMap<>();
kafkaParams.put("metadata.broker.list", args[0]);
kafkaParams.put("group.id", args[1]);
kafkaParams.put("zookeeper.connect", args[0]);
kafkaParams.put("fetch.message.max.bytes", "1100000000");
JavaPairReceiverInputDStream<String, String> messages=KafkaUtils.createStream(jssc,
String.class,
String.class,
StringDecoder.class,
StringDecoder.class,
kafkaParams,
topicMap,MEMORY_ONLY() );
JavaDStream<String> data = messages.map(Tuple2::_2);