HdfsSink3Connector是否可以创建副本?

vlju58qv  于 2022-12-09  发布在  HDFS
关注(0)|答案(1)|浏览(186)

根据Documentation,接收器连接器确保精确一次传输。
在连接器任务线程失败的情况下,如何确保Exact-Once-Delivery?
它会删除失败的任务线程创建的文件吗?还是会将损坏/部分文件保留在HDFS中?
连接器使用预写日志来确保每个记录只写入HDFS一次。此外,连接器通过将Kafka偏移信息编码到HDFS文件中来管理偏移,以便在出现故障和任务重启时可以从上次提交的偏移开始。
请帮我拿这个。

dgjrabp2

dgjrabp21#

HDFS连接器将偏移保存在文件名中,并将其返回给连接器中的消费者API,以便了解需要从何处继续,这样它就提供了恰好一次语义、EOS和避免重复。
/**

  • HDFS连接器跟踪HDFS中文件名的偏移量(对于“恰好一次"语义)
  • 写入HDFS中最后一个文件的记录偏移量。
  • 此方法返回HDFS中最后一个偏移量之后的下一个偏移量,这对某些API很有用
  • (如Kafka消费者偏移跟踪)。
  • @返回写入HDFS的最后一个偏移量之后的下一个偏移量,如果未提交任何文件,则返回-1
yet
  • /

https://github.com/confluentinc/kafka-connect-hdfs/blob/1d68023c38e17f0ed6f87f3b78d86c2e08f39909/src/main/java/io/confluent/connect/hdfs/TopicPartitionWriter.java
offset正在从文件名中读取

long lastCommittedOffsetToHdfs = FileUtils.extractOffset(
      fileStatusWithMaxOffset.getPath().getName());
  log.trace("Last committed offset based on filenames: {}", lastCommittedOffsetToHdfs);
  // `offset` represents the next offset to read after the most recent commit
  offset = lastCommittedOffsetToHdfs + 1;
  log.trace("Next offset to read: {}", offset);

如果hdfs文件已写入磁盘,则在任务启动时,将从文件名读取偏移量,并从该点继续...
如果文件尚未写入磁盘,则在任务开始时,它将再次从之前开始读取,并尝试将文件写入hdfs,成功时,它将提交偏移量,如果提交失败,但文件存在于hdfs上,则它将在任务开始时从hdfs文件继续获取偏移量-

相关问题