确保在 Kafka Connect 中只交付一次

Posted

技术标签:

【中文标题】确保在 Kafka Connect 中只交付一次【英文标题】:Ensure exactly once delivery in Kafka Connect 【发布时间】:2019-10-01 13:36:26 【问题描述】:

你知道这是否可能,如果是的话,使用 kafka 与 kafka 连接确保向 hdfs 准确交付一次的最佳方法是什么?

我知道 Kafka 连接尝试在“'__consumer_offsets”中为其消费者组找到偏移量,但我需要额外检查,因为重复是不可接受的

【问题讨论】:

【参考方案1】:

HDFS Connect 已经声称通过在 HDFS 中使用预写日志仅支持一次。当重新启动连接时,它实际上会检查该日志,除非最近更改了逻辑,而不是偏移量主题

【讨论】:

你的意思是最新的 HDFS 文件? 有多个文件。有一个日志文件连接 HDFS 上的写入,以及将写入数据的临时和最终文件【参考方案2】:

当连接器将文件写入 HDFS 时,它首先写入临时文件,WAL 进行重播,然后将临时文件重命名为最终文件。这个最终文件的命名具有该文件中存在的偏移量。因此,当连接启动时,它会在 HDFS 上查找并找到最新提交的偏移量,该偏移量应保证仅交付一次。如果在 hdfs 中找不到偏移量,那么它会让消费者偏移重置策略。请查看 https://github.com/confluentinc/kafka-connect-hdfs/blob/master/src/main/java/io/confluent/connect/hdfs/DataWriter.java 和 https://github.com/confluentinc/kafka-connect-hdfs/blob/master/src/main/java/io/confluent/connect/hdfs/TopicPartitionWriter.java 以了解更多信息

【讨论】:

以上是关于确保在 Kafka Connect 中只交付一次的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-connect 是不是必须使用模式注册表?

Kafka Connect 接收器任务中多久触发一次 put()?

幂等性与事务性Producer区别(Kafka)

kafka | 幂等生产者和事务生产者是一回事吗?

确保已使用 REST 代理从 Kafka 主题读取所有消息

kafka connect到底会不会重写/丢失数据