kafka SourceTask类线程的poll()方法是否安全?

时间:2017-08-15 14:25:34

标签: apache-kafka apache-kafka-connect

我正在使用Kafka Connect以分布式模式将数据从Web服务发送到Kafka(版本0.10.1)。 poll() method文档指出:

  

轮询此SourceTask以获取新记录。如果没有,该方法应该阻止   数据目前可用。

但是,我不确定Kafka是否可以通过多个线程调用poll()方法。对Web服务的请求非常耗时,它们是用这种方法完成的,我希望避免多次发送它们。

question表示在版本0.10.2.1-cp2之前,poll()方法可以由不同的线程调用。但是,从release notes我无法确认这种情况是否会在较新版本上发生。

1 个答案:

答案 0 :(得分:1)

从框架的角度来看,Kafka Connect任务不需要是线程安全的,任务不应该假设它们可以通过静态机制与其他任务和连接器通信。请注意,当然可能有多个任务在不同的线程中运行。

至少在Kafka 0.11.0.0中,每个SourceTaskSinkTask实例上的方法都是从专用于该任务的线程中调用的。相同的线程用于任务实例的生命周期,直到它被停止。即使任务暂停,线程也会阻塞。

我的理解是,这是至少0.10.1.0以来的行为,但您必须检查代码库以确定。