【问题标题】:How Kafka Connectors are reliable in case of failures?Kafka 连接器在发生故障时如何可靠?
【发布时间】:2019-01-29 02:35:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-kafka apache-kafka-connect


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。我主要担心的是在极端情况下出现错误时的数据丢失。如果 S3 Sink 在成功上传到 S3 后总是提交它的偏移量,对我来说已经足够了。一般来说,如果错误是暂时的并且在合理的时间范围内得到修复,我想确保所有数据都成功传输到 kafka 或从 kafka 传输。
    猜你喜欢
    • 2014-05-13
    • 2017-12-07
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多