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 创建多个任务时,我们如何理解?
在源连接器的情况下,我们使用 JDBC 连接器通过时间戳 and/or 和主键来获取源数据,所以这看起来很自然顺序的。事实上,我们所有的源连接器似乎都只有一项任务。什么会触发 Kafka Connect 创建多个连接器?目前我们 运行 Kafka Connect in distributed mode,但只有一名工人;如果我们有多个工作人员,我们可能会为每个连接器分配多个任务,还是两者不相关?
在接收器连接器的情况下,我们使用 tasks.max=1
显式配置每个接收器连接器,因此不出所料,我们也只能看到每个连接器的一个任务。如果我们删除该配置,大概我们 could/would 会得到不止一项任务。这是否意味着我们输入主题上的消息可能会乱序使用?在这种情况下,如何保证更改的数据一致性?
此外,我们有时会看到单个连接器和任务都进入 FAILED 状态的情况(由于输入连接问题)。重新启动任务会将其从该状态中移除,并重新启动数据流,但连接器仍处于 FAILED 状态。这怎么可能 - 连接器的状态不就是它所有子任务的集合吗?
任务是执行实际数据采集或接收的线程。
每个连接器的任务数由连接器的实现决定。以 Debezium 源连接器到 MySQL 为例,由于一个 MySQL 实例一次只写入一个 binlog 文件,并且必须顺序读取一个文件,因此一个连接器只生成一个任务。
而对于接收器连接器,任务数应等于主题的分区数。
worker 之间的任务分配由任务重新平衡决定,这与 Kafka 消费者组重新平衡过程非常相似。
我们在一个项目中使用 Kafka Connect 有一段时间了,目前完全只使用 Confluent Kafka Connect JDBC connector。我正在努力理解 'tasks' 在 Kafka Connect 中的作用,特别是这个连接器。我明白了'connectors';它们包含一堆关于特定 source/sink 的配置以及它们连接的主题 from/to。我了解连接器和任务之间存在 1:Many
关系,以及任务用于并行化工作的一般原则。但是,当一个连接器 will/might 创建多个任务时,我们如何理解?
在源连接器的情况下,我们使用 JDBC 连接器通过时间戳 and/or 和主键来获取源数据,所以这看起来很自然顺序的。事实上,我们所有的源连接器似乎都只有一项任务。什么会触发 Kafka Connect 创建多个连接器?目前我们 运行 Kafka Connect in distributed mode,但只有一名工人;如果我们有多个工作人员,我们可能会为每个连接器分配多个任务,还是两者不相关?
在接收器连接器的情况下,我们使用
tasks.max=1
显式配置每个接收器连接器,因此不出所料,我们也只能看到每个连接器的一个任务。如果我们删除该配置,大概我们 could/would 会得到不止一项任务。这是否意味着我们输入主题上的消息可能会乱序使用?在这种情况下,如何保证更改的数据一致性?
此外,我们有时会看到单个连接器和任务都进入 FAILED 状态的情况(由于输入连接问题)。重新启动任务会将其从该状态中移除,并重新启动数据流,但连接器仍处于 FAILED 状态。这怎么可能 - 连接器的状态不就是它所有子任务的集合吗?
任务是执行实际数据采集或接收的线程。
每个连接器的任务数由连接器的实现决定。以 Debezium 源连接器到 MySQL 为例,由于一个 MySQL 实例一次只写入一个 binlog 文件,并且必须顺序读取一个文件,因此一个连接器只生成一个任务。
而对于接收器连接器,任务数应等于主题的分区数。
worker 之间的任务分配由任务重新平衡决定,这与 Kafka 消费者组重新平衡过程非常相似。