【问题标题】:What is the relationship between connectors and tasks in Kafka Connect?Kafka Connect 中的连接器和任务之间有什么关系?
【发布时间】:2021-07-19 17:38:10
【问题描述】:

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

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

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

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

【问题讨论】:

标签: apache-kafka apache-kafka-connect


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,这很有帮助,大致就是我所怀疑的。您知道这可能如何影响问题:FAILED 状态并且它没有从任务反映到连接器中吗?这也可能是特定于实现的吗?
  • 是的,我想这很可能是特定于实现的。根据我过去的经验,Debezium 连接器能够反映/status API 中的大多数 错误,但UNKNOWN_TOPIC_OR_PARTITION 错误是一个例外。
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 2020-08-08
  • 2020-08-05
  • 2021-10-01
  • 2021-01-13
  • 2015-07-20
  • 2016-02-18
  • 2019-03-16
相关资源
最近更新 更多