Apache spark 将数据从Spark Streaming推送到Kafka

Apache spark 将数据从Spark Streaming推送到Kafka,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,有人能给我提供示例代码,将Spark Streaming中的记录推送到Kafka吗?使用Spark Streaming,您可以使用Kafka topic中的数据 如果要将记录发布到Kafka主题,可以使用Kafka Producer[ 或者,您可以使用Kafka Connect,使用多个源连接器将数据发布到Kafka主题[ 有关Spark流媒体和Kafka集成的更多信息,请参见下面的链接 我使用Java完成了它。您可以在JavaDStream上使用此函数作为.foreachRDD()的参数。这不

有人能给我提供示例代码,将Spark Streaming中的记录推送到Kafka吗?

使用Spark Streaming,您可以使用Kafka topic中的数据

如果要将记录发布到Kafka主题,可以使用Kafka Producer[

或者,您可以使用Kafka Connect,使用多个源连接器将数据发布到Kafka主题[

有关Spark流媒体和Kafka集成的更多信息,请参见下面的链接


我使用Java完成了它。您可以在
JavaDStream
上使用此函数作为
.foreachRDD()
的参数。这不是最好的方法,因为它会为每个RDD创建一个
KafkaProducer
,您可以使用
KafkaProducers
的“池”来完成这项工作,就像

这是我的密码:

public static class KafkaPublisher implements VoidFunction<JavaRDD<String>> {
    private static final long serialVersionUID = 1L;

    public void call(JavaRDD<String> rdd) throws Exception {
        Properties props = new Properties();
        props.put("bootstrap.servers", "loca192.168.0.155lhost:9092");
        props.put("acks", "1");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1000);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        rdd.foreachPartition(new VoidFunction<Iterator<String>>() {
            private static final long serialVersionUID = 1L;

            public void call(Iterator<String> partitionOfRecords) throws Exception {
                Producer<String, String> producer = new KafkaProducer<>(props);
                while(partitionOfRecords.hasNext()) {
                    producer.send(new ProducerRecord<String, String>("topic", partitionOfRecords.next()));
                }
                producer.close();
            }
        });
    }
}
public静态类KafkaPublisher实现VoidFunction{
私有静态最终长serialVersionUID=1L;
公共void调用(JavaRDD)引发异常{
Properties props=新属性();
props.put(“bootstrap.servers”,“loca192.168.0.155lhost:9092”);
道具放置(“阿克斯”,“1”);
道具放置(“重试”,0);
道具放置(“批量大小”,16384);
道具放置(“linger.ms”,1000);
props.put(“buffer.memory”,33554432);
put(“key.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
put(“value.serializer”、“org.apache.kafka.common.serialization.StringSerializer”);
foreachPartition(新的VoidFunction(){
私有静态最终长serialVersionUID=1L;
公共void调用(迭代器分区记录)引发异常{
制作人=新卡夫卡制作人(道具);
while(partitionOfRecords.hasNext()){
send(newproducerrecord(“topic”,partitionOfRecords.next());
}
producer.close();
}
});
}
}