Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何将Spark流(Dstream/JavaDStream)写入Kafka?_Apache Kafka_Spark Streaming - Fatal编程技术网

Apache kafka 如何将Spark流(Dstream/JavaDStream)写入Kafka?

Apache kafka 如何将Spark流(Dstream/JavaDStream)写入Kafka?,apache-kafka,spark-streaming,Apache Kafka,Spark Streaming,我用以下最新的maven工件尝试了这段Java代码。 以及前一份—— 但下面的代码不允许我使用Java1.8和最新的IDE进行编译 ---进口部-- Map producerConfig=new HashMap(); producerConfig.put(“bootstrap.servers”,“localhost:9092”); producerConfig.put(“key.serializer”,StringSerializer.class); producerConfig.put(“v

我用以下最新的maven工件尝试了这段Java代码。 以及前一份—— 但下面的代码不允许我使用Java1.8和最新的IDE进行编译

---进口部--
Map producerConfig=new HashMap();
producerConfig.put(“bootstrap.servers”,“localhost:9092”);
producerConfig.put(“key.serializer”,StringSerializer.class);
producerConfig.put(“value.serializer”,StringSerializer.class);
KafkaWriter KafkaWriter=新的数据流KafkaWriter(lines.dstream(),scala.reflect.ClassTag$.MODULE$.apply(String.class));
函数1 f=新的MyFunc(){
@凌驾
公共产品记录适用(最终字符串s){
返回新产品记录(“我的主题”,s);
}
};
kafkaWriter.writeToKafka(producerConfig,f,Option.empty());
KafkaWriter.writerToKafka(producerConfig,f,Option.empty)——这行代码在EclipseIDE上给出了以下错误

感谢您的帮助。

卡夫卡作者使用了
scala.collection.Map
而在这次尝试中,我们使用了
java.util.Map

使用了
asScala
转换,但我不知道这是从哪里来的。(它似乎不合法,因为它似乎使用了来自
Scala.collection.JavaConverters
的Scala隐式转换,但这在Java中不起作用)

最简单的解决方案是实例化一个
scala.collection.immutable.HashMap
,尽管我建议将作业迁移到使用scala


如果您使用的是Spark>=v2.2,编写kafka的最简单方法是将数据转换为
数据集
数据帧
,并使用
数据帧编写器
,如下所示:

data.write.format("kafka")
  .option("kafka.bootstrap.servers","...") 
  .option("topic", "abcTopic" )
  .option("checkpointLocation", "/path/to/checkpoint/loc")
  .save()

(好吧,这在我能找到的任何地方都没有记录。)

是的,对于他们使用的“producerConfig”,例如“asScala”转换。进一步查看这条评论——我已经为这个原创(Spark Kafka Writer)创建者发布了如下消息,用于将java映射转换为scala映射
JavaConverters
不依赖隐式,不像
JavaConverations
@BenFradet,恐怕它确实依赖隐式,并且只在Scala中工作。它使用“pimp my library”模式添加了一个显式的
asJava
/
asScala
方法。请参阅:@BenFradet这可能用于以下位置:
JavaConverters.mapascalamap(javaMap)
Map<String, Object> producerConfig = new HashMap<String, Object>();
producerConfig.put("bootstrap.servers", "localhost:9092");
producerConfig.put("key.serializer", StringSerializer.class);
producerConfig.put("value.serializer", StringSerializer.class);

        KafkaWriter<String> kafkaWriter = new DStreamKafkaWriter<>(lines.dstream(), scala.reflect.ClassTag$.MODULE$.apply(String.class));

        Function1<String, ProducerRecord<String, String>> f = new MyFunc<String, ProducerRecord<String, String>>() {
            @Override
            public ProducerRecord<String, String> apply(final String s) {
                return new ProducerRecord<>("my-topic", s);
            }
        };

        kafkaWriter.writeToKafka(producerConfig, f,Option.empty());
data.write.format("kafka")
  .option("kafka.bootstrap.servers","...") 
  .option("topic", "abcTopic" )
  .option("checkpointLocation", "/path/to/checkpoint/loc")
  .save()