Hadoop 合流HDFS连接器正在丢失消息

Hadoop 合流HDFS连接器正在丢失消息,hadoop,apache-kafka,hdfs,apache-kafka-connect,confluent-platform,Hadoop,Apache Kafka,Hdfs,Apache Kafka Connect,Confluent Platform,社区,你能帮我理解为什么我的~3%邮件没有以HDFS结尾吗?我在JAVA中编写了一个简单的producer来生成1000万条消息 publicstaticfinalstringtest_SCHEMA=“{” +“\”类型\“:\”记录\“ +“\”名称\“:\”我的记录\“,” +“\”字段\:[” +“{\'name\':\'str1\',\'type\':\'string\'” +“{\'name\':\'str2\',\'type\':\'string\'” +{\'name\':\'in

社区,你能帮我理解为什么我的~3%邮件没有以
HDFS
结尾吗?我在
JAVA
中编写了一个简单的producer来生成1000万条消息

publicstaticfinalstringtest_SCHEMA=“{”
+“\”类型\“:\”记录\“
+“\”名称\“:\”我的记录\“,”
+“\”字段\:[”
+“{\'name\':\'str1\',\'type\':\'string\'”
+“{\'name\':\'str2\',\'type\':\'string\'”
+{\'name\':\'int1\',\'type\':\'int\'}
+ "]}";
公共KafkaProducerRapper(字符串主题)抛出UnknownHostException{
//存储主题名
this.topic=主题;
//初始化卡夫卡制作人
属性配置=新属性();
config.put(“client.id”,InetAddress.getLocalHost().getHostName());
config.put(“bootstrap.servers”、“myserver-1:9092”);
config.put(“key.serializer”、“io.confluent.kafka.serializers.KafkaAvroSerializer”);
config.put(“value.serializer”、“io.confluent.kafka.serializers.KafkaAvroSerializer”);
config.put(“schema.registry.url”http://myserver-1:8089");
配置放置(“确认”、“全部”);
制作人=新卡夫卡制作人(配置);
//解析模式
Schema.Parser=新Schema.Parser();
schema=parser.parse(TEST_schema);
}
公共无效发送(){
//生成密钥
int key=(int)(Math.random()*20);
//生成记录
GenericData.Record r=新的GenericData.Record(模式);
r、 输入(“str1”,“文本”+键);
r、 输入(“str2”、“text2”+键);
r、 put(“int1”,键);
最终生产记录=新生产记录(主题“K”+键,(一般记录)r);
producer.send(记录,新回调(){
公共void onCompletion(RecordMetadata元数据,异常e){
如果(e!=null){
logger.error(“发送记录{}失败”,记录,e);
messageErrorCounter++;
返回;
}
debug(“为记录{}发送成功”,记录);
messageCounter++;
}
});
}
公共字符串getStats(){return“已发送的消息:“+messageCounter+”/“+messageErrorCounter;”
公共长getMessageCounter(){
返回messageCounter+messageErrorCounter;
}
公众假期结束(){
producer.close();
}
公共静态void main(字符串[]args)抛出InterruptedException、UnknownHostException{
//初始化卡夫卡制作人
Kafkaproducerrapper Kafkaproducerrapper=新的Kafkaproducerrapper(“我的测试主题”);
长最大值=10000000升;
用于(长i=0;i
我在独立模式下使用
汇合HDFS连接器
将数据写入
HDFS
。配置如下:

name=hdfs消费者测试
connector.class=io.confluent.connect.hdfs.HdfsSinkConnector
tasks.max=1
主题=我的测试主题
hdfs.url=hdfs://my-cluster/kafka-test
hadoop.conf.dir=/etc/hadoop/conf/
冲洗。尺寸=100000
旋转。间隔。毫秒=20000
#增加超时以避免CommitFailedException
consumer.session.timeout.ms=300000
consumer.request.timeout.ms=310000
心跳间隔毫秒=60000
session.timeout.ms=100000
连接器将数据写入HDFS,但在等待20000毫秒后(由于
rotate.interval.ms
),并没有收到所有消息

scala>spark.read.avro(“/kafka-test/topics/my-test-topic/partition=*/my-test-topic*”)
.count()
res0:Long=9749015

你知道这种行为的原因是什么吗?我的错在哪里?我使用的是合流3.0.1/Kafka 10.0.0.1

您是否看到最后几条消息没有移动到HDFS?如果是这样,您很可能遇到了这里描述的问题


在rotate.interval.ms过期后,尝试向主题再发送一条消息,以验证这是您遇到的问题。如果您需要根据时间进行轮换,升级以获取修复可能是一个好主意。

您是否看到最后几条消息没有移动到HDFS?如果是这样,您可能遇到了此处描述的问题。请在rotate.interval.ms过期后尝试向主题发送一条消息,以验证您遇到的问题。如果您需要根据时间进行轮换,升级以获取修复可能是一个好主意。这就是解决方案!我更新到Confluent 3.1.1,可以在
HDFS
中看到所有消息。你想把它写下来作为一个答案,我给你应得的荣誉吗?是的,我不知道这有什么区别:)