如果发生故障,Kafka连接器如何可靠?

时间:2018-08-22 19:03:19

标签: apache-kafka apache-kafka-connect

我正在考虑使用Kafka连接器,而不是创建自己的Kafka使用者/生产者,以将一些数据往返于Kafka,并且我看到Kafka连接器在可伸缩性和容错能力方面的价值。但是,如果“任务”由于某种原因失败,我还无法找到连接器的确切行为。这有两种情况:

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

对以上问题的回答取决于我们在谈论哪个连接器吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

总体而言,故障恢复方案均取决于所连接的系统。某些错误是可以恢复的,而某些错误则不能恢复(例如,您的S3访问密钥被吊销,直到获得新的凭据集,它才会写入文件)