Java 卡夫卡到hdfs的融合源代码
为了满足项目的需求,我需要从汇合的java代码中构建一个类,将kafka主题中的数据写入hdfs文件系统 它实际上在CLI中使用connect standalone工作,但我需要对成功构建的源代码执行相同的操作 我对SinkTask和hdfsConnector类有问题。 put方法中出现异常 下面是我的班级代码:Java 卡夫卡到hdfs的融合源代码,java,apache-kafka,apache-kafka-connect,Java,Apache Kafka,Apache Kafka Connect,为了满足项目的需求,我需要从汇合的java代码中构建一个类,将kafka主题中的数据写入hdfs文件系统 它实际上在CLI中使用connect standalone工作,但我需要对成功构建的源代码执行相同的操作 我对SinkTask和hdfsConnector类有问题。 put方法中出现异常 下面是我的班级代码: package io.confluent.connect.hdfs; import static org.junit.Assert.assertEquals; import stat
package io.confluent.connect.hdfs;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.kafka.connect.errors.ConnectException;
import org.apache.kafka.connect.sink.SinkConnector;
import org.apache.kafka.connect.sink.SinkRecord;
import org.apache.kafka.connect.sink.SinkTaskContext;
import io.confluent.connect.avro.AvroData;
import io.confluent.connect.hdfs.avro.AvroFormat;
import io.confluent.connect.hdfs.partitioner.DefaultPartitioner;
import io.confluent.connect.storage.common.StorageCommonConfig;
import io.confluent.connect.storage.partitioner.PartitionerConfig;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.config.ConfigDef;
public class main{
private static Map<String, String> props = new HashMap<>();
protected static final TopicPartition TOPIC_PARTITION = new TopicPartition(TOPIC, PARTITION);
protected static String url = "hdfs://localhost:9000";
protected static SinkTaskContext context;
public static void main(String[] args) {
HdfsSinkConnector hk = new HdfsSinkConnector();
HdfsSinkTask h = new HdfsSinkTask();
props.put(StorageCommonConfig.STORE_URL_CONFIG, url);
props.put(HdfsSinkConnectorConfig.HDFS_URL_CONFIG, url);
props.put(HdfsSinkConnectorConfig.FLUSH_SIZE_CONFIG, "3");
props.put(HdfsSinkConnectorConfig.FORMAT_CLASS_CONFIG, AvroFormat.class.getName());
try {
hk.start(props);
Collection<SinkRecord> sinkRecords = new ArrayList<>();
SinkRecord record = new SinkRecord("test", 0, null, null, null, null, 0);
sinkRecords.add(record);
h.initialize(context);
h.put(sinkRecords);
hk.stop();
} catch (Exception e) {
throw new ConnectException("Couldn't start HdfsSinkConnector due to configuration error", e);
}
}
}
package io.confluent.connect.hdfs;
导入静态org.junit.Assert.assertEquals;
导入静态org.junit.Assert.assertTrue;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
导入java.util.concurrent.TimeUnit;
导入org.apache.kafka.connect.errors.ConnectException;
导入org.apache.kafka.connect.sink.SinkConnector;
导入org.apache.kafka.connect.sink.SinkRecord;
导入org.apache.kafka.connect.sink.SinkTaskContext;
导入io.confluent.connect.avro.AvroData;
导入io.confluent.connect.hdfs.avro.AvroFormat;
导入io.confluent.connect.hdfs.partitioner.DefaultPartitioner;
导入io.confluent.connect.storage.common.StorageCommonConfig;
导入io.confluent.connect.storage.partitioner.PartitionerConfig;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.fs.Path;
导入org.apache.kafka.common.TopicPartition;
导入org.apache.kafka.common.config.ConfigDef;
公共班机{
私有静态映射props=newhashmap();
受保护的静态最终TopicPartition TOPIC_PARTITION=新TopicPartition(主题,分区);
受保护的静态字符串url=”hdfs://localhost:9000";
受保护的静态上下文;
公共静态void main(字符串[]args){
HdfsSinkConnector hk=新的HdfsSinkConnector();
HdfsSinkTask h=新的HdfsSinkTask();
put(StorageCommonConfig.STORE\u URL\u CONFIG,URL);
put(HdfsSinkConnectorConfig.HDFS\u URL\u CONFIG,URL);
props.put(HdfsSinkConnectorConfig.FLUSH\u SIZE\u CONFIG,“3”);
put(HdfsSinkConnectorConfig.FORMAT\u CLASS\u CONFIG,AvroFormat.CLASS.getName());
试一试{
香港(道具),;
集合记录=新的ArrayList();
SinkRecord记录=新的SinkRecord(“测试”,0,null,null,null,null,0);
添加(记录);
h、 初始化(上下文);
h、 放置(记录);
hk.stop();
}捕获(例外e){
抛出新的ConnectException(“由于配置错误,无法启动HdfsSinkConnector”,e);
}
}
}
“put方法中出现异常”-->异常是什么?你需要提供更多的信息。另外,您在代码中编写的自定义是什么,而香草实例无法做到?是处理更适合Kafka Streams还是KSQL?线程“main”org.apache.Kafka.connect.errors.ConnectException中的异常:由于io.confluent.connect.hdfs.main(main.java:63)处的配置错误,无法启动HdfsSinkConnector原因:io.confluent.connect.hdfs.HdfsSinkTask.put(HdfsSinkTask.java:109)在io.confluent.connect.hdfs.main.main(main.java:57)处出现java.lang.NullPointerException异常。我没有得到第二部分,请你给我澄清一下好吗?connect不是这样运行的,那么,我如何在我的应用程序中实现它,我在这里试图避免通过命令行来完成这个过程,这就是为什么我有开发这个类的想法?