根据Documentation,接收器连接器确保精确一次传输。
在连接器任务线程失败的情况下,如何确保Exact-Once-Delivery?
它会删除失败的任务线程创建的文件吗?还是会将损坏/部分文件保留在HDFS中?
连接器使用预写日志来确保每个记录只写入HDFS一次。此外,连接器通过将Kafka偏移信息编码到HDFS文件中来管理偏移,以便在出现故障和任务重启时可以从上次提交的偏移开始。
请帮我拿这个。
根据Documentation,接收器连接器确保精确一次传输。
在连接器任务线程失败的情况下,如何确保Exact-Once-Delivery?
它会删除失败的任务线程创建的文件吗?还是会将损坏/部分文件保留在HDFS中?
连接器使用预写日志来确保每个记录只写入HDFS一次。此外,连接器通过将Kafka偏移信息编码到HDFS文件中来管理偏移,以便在出现故障和任务重启时可以从上次提交的偏移开始。
请帮我拿这个。
1条答案
按热度按时间dgjrabp21#
HDFS连接器将偏移保存在文件名中,并将其返回给连接器中的消费者API,以便了解需要从何处继续,这样它就提供了恰好一次语义、EOS和避免重复。
/**
https://github.com/confluentinc/kafka-connect-hdfs/blob/1d68023c38e17f0ed6f87f3b78d86c2e08f39909/src/main/java/io/confluent/connect/hdfs/TopicPartitionWriter.java
offset
正在从文件名中读取如果hdfs文件已写入磁盘,则在任务启动时,将从文件名读取偏移量,并从该点继续...
如果文件尚未写入磁盘,则在任务开始时,它将再次从之前开始读取,并尝试将文件写入hdfs,成功时,它将提交偏移量,如果提交失败,但文件存在于hdfs上,则它将在任务开始时从hdfs文件继续获取偏移量-