apache-kafka - Kafka 连接器在发生故障时如何可靠?
问题描述
我正在考虑使用 Kafka 连接器而不是创建自己的 Kafka 消费者/生产者来将一些数据从/向 Kafka 移动,我看到了 Kafka 连接器在可扩展性和容错性方面提供的价值。但是,如果“任务”由于某种原因失败,我无法找到连接器的确切行为。这里有几个场景:
- 对于 sink 连接器(S3-Sink),如果它(任务)失败(在所有重试之后)成功地将数据发送到目的地(例如由于网络问题),worker 会发生什么?它会崩溃吗?以后是否能够重新使用来自 Kafak 的相同数据?
- 对于一个源连接器(JDBC Source),如果它无法发送到Kafka,它会在以后重新处理相同的数据吗?这取决于来源是什么?
对上述问题的回答是否取决于我们所讨论的连接器?
解决方案
我认为,在 Kafka 2.0 中,他们引入了优雅错误处理的概念,可以跳过错误消息或写入 DLQ 主题。
1) S3 sink 可能会失败,它会停止处理数据。但是,如果您解决了问题(对于可能出现的各种边缘情况),接收器本身恰好一次交付给 S3。消耗的偏移量存储为常规消费者偏移量,直到文件上传完成,才会提交给 Kafka。但是,很明显,如果您没有在主题的保留期之前解决问题,您就会丢失数据。
2)是的,这取决于来源。我不知道 JDBC 连接器的语义,但这确实取决于您使用的查询模式。例如,对于递增的时间戳,如果您尝试对范围内的所有行每 5 秒运行一次查询,我不相信它会重试旧的、错过的时间窗口
总体而言,故障恢复方案都依赖于所连接的系统。有些错误是可恢复的,有些则不可恢复(例如,您的 S3 访问密钥被撤销,并且在您获得新的凭证集之前不会写入文件)
推荐阅读
- android - Repo(GIT)使用镜像时如何更新清单文件?
- sql - COALESCE 使结果值翻倍
- javascript - 将 cURL 转换为 jQuery AJAX
- java - 无法运行路径设置为 Java 6 的 Grails 2.1
- php - 即使我在 htaccess 文件中进行了配置,PHP url 重写也不会发生
- reactjs - React JSX:如何避免多个元素的多个 onClick 处理程序
- .net - 64 位 VBA 调用以在外部 .dll 中打开 Windows 窗体
- ios - 打开侧面菜单(SWRevealviewController)时如何关闭键盘?
- c - C中的字符串复制错误
- java - 尝试从我的大学停车场 API 在 Android 中导入数据