如何处理Kafka Connect Sink中的背压?

时间:2018-04-19 06:19:17

标签: apache-kafka apache-kafka-connect

我们构建了一个自定义Kafka Connect接收器,后者又调用远程REST API。如何将背压传播到Kafka Connect基础架构,因此在远程系统比内部消费者向put()传递消息的速度慢的情况下,调用put()的频率较低? Kafka连接文档说我们不应该在put()中阻塞,而是在flush()中阻塞。但是put()中没有阻塞意味着我们必须缓冲数据,如果put()被调用的频率高于flush(),那么在某些时候肯定会导致OOM异常。 我已经看到允许kafka使用者在循环()中调用pause()或阻塞。是否可以在kafka连接接收器中利用它?

1 个答案:

答案 0 :(得分:1)

我已经看到允许kafka使用者调用pause()或在loop()中进行阻塞。是否可以在kafka连接接收器中利用此功能?

原始消费者没有暴露,所以没有。您可以在整个连接器上调用/pause,尽管我不确定那时未刷新的消息会发生什么。

但不阻塞put()意味着我们必须缓冲数据,这肯定会在某些时候导致OOM异常

可以,但是,那确实是唯一可行的方法,可以将数据保留的时间超过必要的时间。例如,这就是S3和HDFS连接器的工作方式。

rotate.interval.ms
调用文件提交的时间间隔(以毫秒为单位)。

您的HTTP客户端连接可能仍会阻止发出请求,不是吗?

另一种选择是让您的HTTP服务器嵌入一个Kafka使用者,以便它可以轮询消息本身并在本地对其进行操作,而不需要通过HTTP发送请求。