【问题标题】:Why is the Kafka distributed connector dying when the node I created it on is killed?为什么当我创建它的节点被杀死时,Kafka 分布式连接器会死掉?
【发布时间】:2017-04-21 15:35:13
【问题描述】:

我在本地“启动”Docker 容器(独立于 Kafka 节点容器)中以分布式模式启动 Kafka 连接器。连接器按预期工作,但是当我终止启动容器时,连接器停止工作。我希望它能够继续工作,因为我相信它是在另一个容器中的 Kafka 节点上的工作人员上注册和运行的。我的设置更详细如下:

目前我在本地通过 Docker 容器运行一切。我有:

  1. Zookeeper 节点 (3.4.9)
  2. Kafka 节点(Apache,0.10.1.0)
  3. “启动”节点。

启动节点下载适当的 Kafka 版本并解压缩其内容。然后它构建连接器源,设置类路径以包含必要的 JAR,然后执行连接器:

connect-distributed.sh config/connect-distributed.properties

分布式属性文件设置组 ID、各种主题名称、模式和转换器以及引导服务器(指向上面的 Kafka 节点 (2))。

此命令似乎执行正常,restful 连接器 http 服务已成功启动。然后我可以向http://example:8083/connectors 发出POST 请求,为连接器任务提供配置。命令完成且没有错误,连接器已成功启动。我可以从 Kafka 节点 (2) 中的主题消费,我看到的输出表明连接器正在工作并通过它发送数据。

当我终止启动节点 (3) 时,我希望连接器继续运行,因为我在 Kafka 集群中注册了它,尽管集群只有一个。连接器不会继续运行,并且似乎与启动节点一起死亡。连接器现在不应该由集群中的工作人员管理吗?我是否需要更改启动连接器的方式,还是我误解了什么?

【问题讨论】:

    标签: docker apache-kafka apache-kafka-connect


    【解决方案1】:

    Kafka 连接器不在 Kafka 代理上执行。它们在“Kafka Connect Worker”进程中执行,这就是您的问题所说的“'启动'节点”。这些进程接受连接器的 REST 请求并在工作进程中运行连接器。在底层,这些进程只是通过普通的生产者和消费者与 Kafka 代理进行交互。 Kafka Connect 在这些客户端之上提供了一个框架,以便轻松构建可扩展的连接器,因此连接器开发人员只需关注如何将数据拉入或推送到连接器所针对的系统。这意味着只有至少有一个工作进程仍然存在时,才会继续处理。

    有两种类型的工作进程。在独立模式下,连接器配置不会在任何地方持久化——您通常通过命令行传递它。偏移信息(即您已经复制了哪些数据)保存在本地文件系统上。因此,在这种模式下,您只能假设如果您在同一节点上重新启动进程并访问同一文件系统,您会从上次中断的地方继续。

    在分布式模式下,工作人员协调分配工作,并为连接器配置、偏移量等共享公共的持久存储(在 Kafka 中)。这意味着,如果您启动一个实例并创建一个连接器,则关闭该实例实例将停止所有工作。但是,当您再次启动一个实例时,它将从上次中断的地方继续,而无需重新提交连接器配置,因为该信息已保存到 Kafka。如果您启动多个实例,它们将协调以对它们之间的任务进行负载平衡,如果一个实例发生故障(由于崩溃、弹性缩减您正在运行的实例数量、电源故障等),其余实例将重新分配自动工作。

    您可以找到有关工作器、不同类型以及故障转移如何在分布式模式下工作的更多详细信息in Confluent's Kafka Connect documentation

    【讨论】:

    • 感谢您的回答。所以这意味着我的 Kafka 节点配置的一部分应该启动连接器,如果我想要一个工作进程在我的 Kafka 集群中的每个节点上运行至少一个连接器任务?第二个问题:如果连接器由于某种原因失败,我需要一些东西来监控连接器状态主题,它会在必要的节点上自动重新启动它?
    • Workers 会自动分配任务,所以只要你启动至少 1 个连接器并且有足够的任务,所有的workers 都会主动处理数据。对于监控,是的,您可以监控状态主题并采取适当的措施重新启动(if 这是有道理的;这可能是其他系统的问题,仅通过重新启动任务无法解决)。
    • 再次感谢您的帮助。因此,如果我的 Kafka 集群中有一组三个节点,我应该在每个节点上启动连接器,让工作人员在每个节点上为该连接器运行任务,确保如果单个节点发生故障,将有连接器在工作人员上运行其他节点? IE。在一个节点上启动连接器不会自动导致连接器及其各自的工作人员在其他节点上启动?
    猜你喜欢
    • 2013-08-19
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2019-11-17
    • 2023-03-21
    相关资源
    最近更新 更多