我们构建了一个自定义Kafka Connect接收器,后者又调用远程REST API。如何将背压传播到Kafka Connect基础架构,因此在远程系统比内部消费者向put()传递消息的速度慢的情况下,调用put()的频率较低? Kafka连接文档说我们不应该在put()中阻塞,而是在flush()中阻塞。但是put()中没有阻塞意味着我们必须缓冲数据,如果put()被调用的频率高于flush(),那么在某些时候肯定会导致OOM异常。 我已经看到允许kafka使用者在循环()中调用pause()或阻塞。是否可以在kafka连接接收器中利用它?
答案 0 :(得分:1)
我已经看到允许kafka使用者调用pause()或在loop()中进行阻塞。是否可以在kafka连接接收器中利用此功能?
原始消费者没有暴露,所以没有。您可以在整个连接器上调用/pause
,尽管我不确定那时未刷新的消息会发生什么。
但不阻塞put()意味着我们必须缓冲数据,这肯定会在某些时候导致OOM异常
可以,但是,那确实是唯一可行的方法,可以将数据保留的时间超过必要的时间。例如,这就是S3和HDFS连接器的工作方式。
rotate.interval.ms
调用文件提交的时间间隔(以毫秒为单位)。
您的HTTP客户端连接可能仍会阻止发出请求,不是吗?
另一种选择是让您的HTTP服务器嵌入一个Kafka使用者,以便它可以轮询消息本身并在本地对其进行操作,而不需要通过HTTP发送请求。