docker - 为什么当我创建它的节点被杀死时,Kafka 分布式连接器就会死亡?

标签 docker apache-kafka apache-kafka-connect

我正在本地“启动”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 集群,尽管是一个集群。连接器不会继续运行,并且似乎随启动节点一起终止。连接器现在不应该由集群中的工作人员管理吗?我是否需要更改启动连接器的方式,或者我是否误解了什么?

最佳答案

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

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

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

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

关于docker - 为什么当我创建它的节点被杀死时,Kafka 分布式连接器就会死亡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41004805/

相关文章:

spring - 放置在Docker中时Spring应用程序无法通信

apache-kafka - 即使 json 数据包含架构和有效负载字段,kafka 连接 hdfs 接收器连接器也失败

json - Kafka JDBC Sink Connector 对于具有可选字段的模式的消息给出空指针异常

Docker 连接到主机 mysql 时出错

docker - 从 dockerfile 运行 OCI CLI 命令

amazon-web-services - 用于生产 EC2 的 Docker

python - 如何以 “fire and forget” 异步运行函数?

elasticsearch - KafkaConnect elasticSearch 文档 ID 创建

elasticsearch - kafka-connect-elasticsearch : When using "write.method" as upsert, 是否可以在 kafka 主题上使用相同的 AVRO 对象发送部分文档?

hadoop - Kafka Connect HDFS 接收器与 Azure Blob 存储