【问题标题】:Run kafka connect distributed mode on many nodes在多个节点上运行 kafka connect 分布式模式
【发布时间】:2018-04-21 07:48:07
【问题描述】:

我正在测试一个 kafka 连接器的弹性,我想在它运行时杀死一个工人,从而杀死连接器实例。最简单的方法可能是强制分布式模式在多个节点上运行,然后杀死该节点上的工作进程(对吗?)。如何让 Kafka 不仅在它启动的节点上连接 spawn 工作人员?这是在工作人员配置中定义的吗?

【问题讨论】:

    标签: apache-kafka apache-kafka-connect


    【解决方案1】:

    所以最后我做的是:

    • 将 Kafka Connect 分布式模式所需的所有 jar 复制到我想在其上运行它的两个节点(在 HDP 2.5.3 中,您只能在一个节点上获取这些 jar)。
    • 在两个节点上,我运行了启动脚本,其中属性文件指向我的 jar。
    • 使用 REST 界面,我将我的连接器发布到一个任务中,我可以看到一个工作人员拥有连接器实例,另一个工作人员拥有它的任务。
    • 我杀死了任务工作节点(使用ps -ef | grep connect),并看到它已在剩余节点上重生。
    • 我重置了测试并尝试关闭连接器实例节点,令我惊讶的是,连接器实例在另一个节点上重新启动。

    总结我的弹性测试,Kafka Connect 似乎就像打地鼠一样;你可以在任何地方杀死任务或连接器,它们只会在其他地方重生。

    【讨论】:

      【解决方案2】:

      是的,处理故障和自动重​​启工作负载正是 Kafka Connect 可以做的。您将它作为一个集群运行,通常每个节点一个工作人员。然后每个工作人员运行一个或多个任务,这由 Connect 管理。如果一个工作人员死亡,它正在运行的所有任务都会以负载平衡的方式在其他可用工作人员上重新启动。查看architecture reference 了解更多信息。

      要将工作人员定义为集群内,请为它们分配相同的group.id。请参阅config docs 了解更多信息。

      【讨论】:

      • 感谢您的回答。我知道在分布式模式下连接的预期行为,我要问两件事;如何确保工人被分配到不同的节点,以及如何杀死一个。
      • 如何部署 workers 取决于您,它是 Connect 安装的一部分(只要确保您设置了 group.id)。 task 由 Kafka Connect 自动分发,并实际执行工作(从源拉取/推送到目标)。因此,根据所讨论的故障场景,一个工人(零个、一个或多个任务)死亡,或者一个任务。通过杀死 JVM 进程来模拟一个工人死亡。要杀死单个任务,我不确定这是否可能。
      • 抱歉碰到老问题,但这不是负载平衡。共享工作负载(任务)应该是负载平衡——这更多的是故障转移。我尝试实现负载平衡但没有成功。有可能吗?有参考吗?
      • 我建议您开始一个新问题(参考这个问题),清楚地说明您正在尝试做什么,因为从您的评论中不清楚您究竟想要什么。谢谢。
      • @RobinMoffatt - 这里是stackoverflow.com/questions/57869583/…
      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 2019-11-30
      • 2019-02-03
      • 2017-06-11
      • 2019-05-12
      • 2021-12-21
      • 2020-01-02
      • 2020-05-17
      相关资源
      最近更新 更多