首页 > 解决方案 > Kafka 连接器在发生故障时如何可靠?

问题描述

我正在考虑使用 Kafka 连接器而不是创建自己的 Kafka 消费者/生产者来将一些数据从/向 Kafka 移动,我看到了 Kafka 连接器在可扩展性和容错性方面提供的价值。但是,如果“任务”由于某种原因失败,我无法找到连接器的确切行为。这里有几个场景:

  1. 对于 sink 连接器(S3-Sink),如果它(任务)失败(在所有重试之后)成功地将数据发送到目的地(例如由于网络问题),worker 会发生什么?它会崩溃吗?以后是否能够重新使用来自 Kafak 的相同数据?
  2. 对于一个源连接器(JDBC Source),如果它无法发送到Kafka,它会在以后重新处理相同的数据吗?这取决于来源是什么?

对上述问题的回答是否取决于我们所讨论的连接器?

标签: apache-kafkaapache-kafka-connect

解决方案


我认为,在 Kafka 2.0 中,他们引入了优雅错误处理的概念,可以跳过错误消息或写入 DLQ 主题。

1) S3 sink 可能会失败,它会停止处理数据。但是,如果您解决了问题(对于可能出现的各种边缘情况),接收器本身恰好一次交付给 S3。消耗的偏移量存储为常规消费者偏移量,直到文件上传完成,才会提交给 Kafka。但是,很明显,如果您没有在主题的保留期之前解决问题,您就会丢失数据。

2)是的,这取决于来源。我不知道 JDBC 连接器的语义,但这确实取决于您使用的查询模式。例如,对于递增的时间戳,如果您尝试对范围内的所有行每 5 秒运行一次查询,我不相信它会重试旧的、错过的时间窗口

总体而言,故障恢复方案都依赖于所连接的系统。有些错误是可恢复的,有些则不可恢复(例如,您的 S3 访问密钥被撤销,并且在您获得新的凭证集之前不会写入文件)


推荐阅读