Kafka Connect 中连接器和任务之间的关系是什么?

What is the relationship between connectors and tasks in Kafka Connect?

我们在一个项目中使用 Kafka Connect 有一段时间了,目前完全只使用 Confluent Kafka Connect JDBC connector。我正在努力理解 'tasks' 在 Kafka Connect 中的作用,特别是这个连接器。我明白了'connectors';它们包含一堆关于特定 source/sink 的配置以及它们连接的主题 from/to。我了解连接器和任务之间存在 1:Many 关系,以及任务用于并行化工作的一般原则。但是,当一个连接器 will/might 创建多个任务时,我们如何理解?

此外,我们有时会看到单个连接器和任务都进入 FAILED 状态的情况(由于输入连接问题)。重新启动任务会将其从该状态中移除,并重新启动数据流,但连接器仍处于 FAILED 状态。这怎么可能 - 连接器的状态不就是它所有子任务的集合吗?

任务是执行实际数据采集或接收的线程。

每个连接器的任务数由连接器的实现决定。以 Debezium 源连接器到 MySQL 为例,由于一个 MySQL 实例一次只写入一个 binlog 文件,并且必须顺序读取一个文件,因此一个连接器只生成一个任务。

而对于接收器连接器,任务数应等于主题的分区数。

worker 之间的任务分配由任务重新平衡决定,这与 Kafka 消费者组重新平衡过程非常相似。