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

And*_*ier 10 apache-kafka apache-kafka-connect

我们在一个项目中使用 Kafka Connect 一段时间了,目前完全只使用Confluence Kafka Connect JDBC 连接器。我正在努力理解“任务”在 Kafka Connect 中的作用,特别是对于这个连接器。我理解“连接器”;它们包含一系列有关特定源/接收器以及它们连接的主题的配置。我了解1:Many连接器和任务之间存在关系,以及任务用于并行工作的一般原则。但是,我们如何理解连接器何时会/可能创建多个任务?

  • 在源连接器的情况下,我们使用 JDBC 连接器通过时间戳和/或主键获取源数据,因此这本质上看起来是顺序的。事实上,我们所有的源连接器似乎都只有一项任务。什么会触发 Kafka Connect 创建多个连接器?目前我们正在分布式模式下运行Kafka Connect ,但只有一个worker;如果我们有多个工作人员,每个连接器是否可以执行多个任务,或者两者不相关?

  • 在接收器连接器的情况下,我们使用 显式配置每个接收器连接器tasks.max=1,因此毫不奇怪,我们也只看到每个连接器的一项任务。如果我们删除该配置,想必我们可以/将会获得多个任务。这是否意味着我们输入主题上的消息可能会被乱序消费?在这种情况下,如何保证变更的数据一致性?

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

小智 17

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

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

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

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