为什么kafka分布式连接器在我创建它的节点被杀死时会死掉?

b4wnujal  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(301)

我正在本地“launch”docker容器(独立于kafka节点容器)中以分布式模式启动kafka连接器。连接器按预期工作,但当我终止启动容器时,连接器停止工作。我希望它能继续工作,因为我相信它是在另一个容器中的kafka节点上的一个worker上注册和运行的。更详细的设置如下:
目前我正在本地通过docker容器运行一切。我有:
zookeeper节点(3.4.9)
Kafka节点(apache,0.10.1.0)
“启动”节点。
launch节点下载相应的kafka版本并解压其内容。然后构建连接器源,设置类路径以包含必要的jar,然后执行连接器:

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

分布式属性文件设置组id、各种主题名称、模式和转换器以及引导服务器(指向上面的kafka节点(2))。
在restful连接器http服务成功启动的情况下,这个命令似乎可以正确执行。然后,我可以向http://example:8083/连接器,提供连接器任务的配置。命令完成,没有错误,连接器成功启动。我可以使用kafka节点(2)中的一个主题,我看到的输出表明连接器正在工作并通过它发送数据。
当我终止启动节点(3)时,我希望连接器继续运行,因为我向kafka集群注册了它,尽管它是一个集群。连接器不会继续运行,并且似乎与启动节点一起消亡。连接器现在不是应该由群集中的工作进程管理吗?我需要改变我启动连接器的方式吗?还是我误解了什么?

tvokkenx

tvokkenx1#

kafka连接器不在kafka代理上执行。它们在“kafka connect worker”进程中执行,您的问题称之为“启动”节点。这些进程接受对连接器的rest请求,并在工作进程中运行连接器。在幕后,这些过程只是通过正常的生产者和消费者与Kafka经纪人进行互动。kafka connect在这些客户机之上提供了一个框架,使构建可伸缩连接器变得容易,因此连接器开发人员只需关注如何将数据拉入或推送到为其编写连接器的系统。这意味着只有在至少一个工作进程仍处于活动状态时,处理才会继续。
工作进程有两种类型。在独立模式下,连接器配置不会在任何地方持久化——通常通过命令行传入。偏移量信息(即已复制的数据)保存在本地文件系统中。因此,在这种模式下,您只能假设如果您在具有相同文件系统访问权限的同一节点上重新启动进程,您将恢复到上次停止的位置。
在分布式模式下,工人协调分配工作,他们共享连接器配置、偏移等的公共持久存储(在kafka中)。这意味着,如果启动一个示例并创建连接器,关闭该示例将停止所有工作。但是,当您再次启动一个示例时,它将恢复到停止的位置,而不重新提交连接器配置,因为该信息已持久保存到kafka。如果您启动多个示例,它们将协调以平衡它们之间的任务负载,如果一个示例失败(由于崩溃、弹性缩小正在运行的示例的大小、电源故障等),其余示例将自动重新分配工作。
您可以在confluent的kafka connect文档中找到更多关于worker、不同类型以及故障转移如何在分布式模式下工作的详细信息

相关问题