【问题标题】:How do Kafka Connect workers allocate manage resource limits (memory/cores) to distribute tasks?Kafka Connect 工作人员如何分配管理资源限制(内存/核心)来分配任务?
【发布时间】:2021-04-25 10:32:45
【问题描述】:

在 Kubernetes 中,您明确指定容器的资源限制。在启动 Kafka 连接器时,您请求最大任务,但连接工作集群如何知道如何分配负载?它认为任务是平等的吗?它是否使用内部指标?

Apache Kafka 文档和 confluent 文档没有明确说明,除非 Confluent 建议以下内容,这表明连接工作人员没有资源管理:

资源限制在很大程度上取决于工作器运行的连接器类型,但在大多数情况下,当在单台机器上同时运行工作器时,用户应该注意 CPU 和内存限制。

https://docs.confluent.io/3.1.2/connect/userguide.html#connect-standalone-v-distributed

此外,集群部署似乎需要外部资源管理器来处理工作人员的故障转移。

Kafka Connect 工作人员可以通过多种方式部署,每种方式都有自己的优势。 Worker 很适合在 YARN、Mesos 或 Docker Swarm 等托管环境中的容器中运行,因为所有状态都存储在 Kafka 中,从而使本地进程本身无状态。我们提供 Docker 镜像和开始使用这些镜像的文档在这里。按照设计,Kafka Connect 不会自动处理重启或扩展工作线程,这意味着您现有的集群解决方案可以继续透明地使用。

【问题讨论】:

    标签: apache-kafka apache-kafka-connect


    【解决方案1】:

    connect worker 集群如何知道如何分配负载

    每个连接器可以选择将其工作划分为任务(例如,可以并行完成从一个数据库中提取多个表,因此一个表将由一个任务完成),直到tasks.max 已配置限制。

    Kafka Connect 在可用的工作人员之间平衡这些任务,使它们均匀分布(基于任务的数量)。

    作为KIP-415 的一部分,Apache Kafka 2.3 版中的再平衡协议发生了更改,KIPhere 中有详细信息。简而言之,通过增量协作重新平衡,Kafka Connect 从负载最少的工作人员开始平均分配任务,最终在负载均衡时包括更多工作人员。

    此外,集群部署似乎需要外部资源管理器来处理工作人员的故障转移。

    要明确 - tasks 的故障转移是由 Kafka Connect 自动完成的,正如您所说,workers 的故障转移将由外部管理。

    【讨论】:

    • 谢谢@OneCricketeer,我在下半场改写了我的答案
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2021-02-17
    相关资源
    最近更新 更多