kafka SourceTaskclass的poll()方法线程安全吗?
Is the poll() method of kafka SourceTask class thread safe?
我正在使用 Kafka Connect to send data from a Web Service to Kafka (version 0.10.1) in distributed mode. The poll()
method 文档指出:
Poll this SourceTask for new records. This method should block if no
data is currently available.
但是,我不确定poll()
方法是否可以被Kafka的多个线程调用。对 Web 服务的请求非常耗时,它们是在该方法中完成的,我想避免多次发送它们。
有一个question that states that prior to version 0.10.2.1-cp2, poll()
method could be called by different threads. However, from the release notes我无法确认这种情况是否不会发生在较新的版本上。
从框架的角度来看,Kafka Connect 任务不需要是线程安全的,并且任务不应假定它们可以通过静态机制与其他任务和连接器进行通信。请注意,当然可能有多个任务 运行 在单独的线程中。
至少在 Kafka 0.11.0.0 中,每个 SourceTask
和 SinkTask
实例上的方法都是从专用于该任务的线程调用的。同一个线程在任务实例的生命周期内使用,直到它被停止。即使任务暂停,线程也会阻塞。
我的理解是,至少从 0.10.1.0 开始就是这种行为,但您必须检查代码库才能确定。
我正在使用 Kafka Connect to send data from a Web Service to Kafka (version 0.10.1) in distributed mode. The poll()
method 文档指出:
Poll this SourceTask for new records. This method should block if no data is currently available.
但是,我不确定poll()
方法是否可以被Kafka的多个线程调用。对 Web 服务的请求非常耗时,它们是在该方法中完成的,我想避免多次发送它们。
有一个question that states that prior to version 0.10.2.1-cp2, poll()
method could be called by different threads. However, from the release notes我无法确认这种情况是否不会发生在较新的版本上。
从框架的角度来看,Kafka Connect 任务不需要是线程安全的,并且任务不应假定它们可以通过静态机制与其他任务和连接器进行通信。请注意,当然可能有多个任务 运行 在单独的线程中。
至少在 Kafka 0.11.0.0 中,每个 SourceTask
和 SinkTask
实例上的方法都是从专用于该任务的线程调用的。同一个线程在任务实例的生命周期内使用,直到它被停止。即使任务暂停,线程也会阻塞。
我的理解是,至少从 0.10.1.0 开始就是这种行为,但您必须检查代码库才能确定。