我是一个kafka连接器的弹性测试,我想在一个工作器运行时杀死它,从而杀死了连接器实例 . 最简单的方法可能是强制分布式模式在多个节点上运行,然后只杀死该节点上的工作进程(对吗?) . 如何让Kafka连接spawn worker不仅仅是它所启动的节点?这是在worker配置中定义的吗?
是的,处理故障并自动重新启动工作负载正是Kafka Connect所能做的 . 您将其作为群集运行,通常每个节点一个工作线程 . 然后,每个工作人员运行一个或多个任务,这由Connect管理 . 如果工作人员死亡,则以负载 balancer 的方式在其他可用工作程序上重新启动它正在运行的所有任务 . 有关更多信息,请查看architecture reference .
要将worker定义为在群集中,请为它们分配相同的 group.id . 有关详细信息,请参阅config docs .
group.id
所以我最终做的是:
将Kafka Connect分布式模式所需的所有 jar 复制到我想要运行的两个节点上(在HDP 2.5.3中,您只能在一个节点上获得这些 jar ) .
在两个节点上,我运行了启动脚本,其属性文件指向我的jar .
使用REST接口我发布了一个带有任务的连接器,我可以看到一个 Worker 有连接器实例而另一个有任务 .
我杀死了任务工作者节点(使用 ps -ef | grep connect ),并看到它已在剩余节点上重新生成 .
ps -ef | grep connect
我重置测试并尝试终止连接器实例节点,令我惊讶的是,连接器实例在另一个节点上重新启动 .
总结一下我的弹性测试,Kafka Connect似乎就像玩傻瓜一样;你可以在任何地方杀死任务或连接器,它们只会在其他地方重新生成 .
2 回答
是的,处理故障并自动重新启动工作负载正是Kafka Connect所能做的 . 您将其作为群集运行,通常每个节点一个工作线程 . 然后,每个工作人员运行一个或多个任务,这由Connect管理 . 如果工作人员死亡,则以负载 balancer 的方式在其他可用工作程序上重新启动它正在运行的所有任务 . 有关更多信息,请查看architecture reference .
要将worker定义为在群集中,请为它们分配相同的
group.id
. 有关详细信息,请参阅config docs .所以我最终做的是:
将Kafka Connect分布式模式所需的所有 jar 复制到我想要运行的两个节点上(在HDP 2.5.3中,您只能在一个节点上获得这些 jar ) .
在两个节点上,我运行了启动脚本,其属性文件指向我的jar .
使用REST接口我发布了一个带有任务的连接器,我可以看到一个 Worker 有连接器实例而另一个有任务 .
我杀死了任务工作者节点(使用
ps -ef | grep connect
),并看到它已在剩余节点上重新生成 .我重置测试并尝试终止连接器实例节点,令我惊讶的是,连接器实例在另一个节点上重新启动 .
总结一下我的弹性测试,Kafka Connect似乎就像玩傻瓜一样;你可以在任何地方杀死任务或连接器,它们只会在其他地方重新生成 .