【问题标题】:Not able to understand Kafka Connect in distributed mode无法理解分布式模式下的 Kafka Connect
【发布时间】:2020-05-17 22:06:03
【问题描述】:

我开始以独立模式连接 Kafka,如下所示

/usr/local/confluent/bin/connect-standalone /usr/local/confluent/etc/kafka/connect-standalone.properties /usr/local/confluent/etc/kafka-connect-elasticsearch/quickstart-elasticsearch.properties

之后,我使用 rest API 创建了一个包含所有详细信息的连接器。 像这样

curl  -X POST -H "Content-Type: application/json" --data '{"name":"elastic-search-sink-audit","config":{"connector.class":"io.confluent.connect.elasticsearch.ElasticsearchSinkConnector","tasks.max":"5","topics":"fsp-AUDIT_EVENT_DEMO","key.ignore":"true","connection.url":"https://**.amazonaws.com","type.name":"kafka-connect-distributed","name":"elastic-search-sink-audit","errors.tolerance":"all","errors.deadletterqueue.topic.name":"fsp-dlq-audit-event"}}' http://localhost:8083/connectors | jq

之后,当我检查状态时,我可以看到 5 个任务正在运行

curl  localhost:8083/connectors/elastic-search-sink-audit/tasks | jq

问题 1:

这是否意味着我正在以分布式模式或仅在独立模式下运行我的 kafka 连接连接器?

问题 2:

我是否必须修改 connect-distributed.properties 文件并像独立一样开始?

问题 3:

目前我只在一个 EC2 中运行我的所有设置,现在如果我必须再添加 5 个 EC2 以使连接器更加并行并加快我如何做到这一点 kafka 连接如何理解又添加了 5 个 EC2 并且它必须分担工作量?

问题 4: 我是否必须在所有 ec2 中运行并启动并创建 kafka 连接并开始?我如何确认所有 5 个 EC2 都使用相同的连接器正常运行。

最后我给出了尝试以分布式模式启动连接器。 首先我是这样开始的

/usr/local/confluent/bin/connect-distributed /usr/local/confluent/etc/kafka/connect-distributed.properties /usr/local/confluent/etc/kafka-connect-elasticsearch/quickstart-elasticsearch.properties

然后在另一个会话中使用我这样提交的 REST API

curl  -X POST -H "Content-Type: application/json" --data '{"name":"elastic-search-sink-audit","config":{"connector.class":"io.confluent.connect.elasticsearch.ElasticsearchSinkConnector","tasks.max":"5","topics":"fsp-AUDIT_EVENT_DEMO","key.ignore":"true","connection.url":"https://**.amazonaws.com","type.name":"kafka-connect-distributed","name":"elastic-search-sink-audit","errors.tolerance":"all","errors.deadletterqueue.topic.name":"fsp-dlq-audit-event"}}' http://localhost:8083/connectors | jq

但是一旦点击这个我就开始出现这样的错误

rror: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)
[2020-02-01 13:48:15,551] WARN [Producer clientId=producer-3] Got error produce response with correlation id 159 on topic-partition connect-configs-0, retrying (2147483496 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)
[2020-02-01 13:48:15,652] WARN [Producer clientId=producer-3] Got error produce response with correlation id 160 on topic-partition connect-configs-0, retrying (2147483495 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)
[2020-02-01 13:48:15,753] WARN [Producer clientId=producer-3] Got error produce response with correlation id 161 on topic-partition connect-configs-0, retrying (2147483494 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)
[2020-02-01 13:48:15,854] WARN [Producer clientId=producer-3] Got error produce response with correlation id 162 on topic-partition connect-configs-0, retrying (2147483493 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)
[2020-02-01 13:48:15,956] WARN [Producer clientId=producer-3] Got error produce response with correlation id 163 on topic-partition connect-configs-0, retrying (2147483492 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender:598)

当我尝试使用 curl 创建连接器时终于请求超时

{ "error_code": 500, "message": "Request timed out" }

请帮助我理解这一点。

【问题讨论】:

  • 顺便说一下,你可能想看看使用 Landoop Kafka Connect UI
  • @cricket_007 是的,这很好,但我在 AWS 中的 EC2 Linux 上运行,我没有足够的权限...Landdop 我可以看到我的本地但在 EC2 AWS 中看不到
  • 权限做什么?您显然可以下载 Kafka,那么为什么不能下载其他东西呢? EC2 没关系,你可以在自己的机器上运行 UI
  • @cricket_007 我没有从我的本地机器连接 EC2 ..我在 AWS 中做所有事情。所以基本上我无法从本地到 EC2 ping 或 telnet
  • 那你是如何使用 ssh 的呢?这只是一个 VPC 配置......或者您可以通过 SSH 隧道访问任何 HTTP 端口

标签: apache-kafka apache-kafka-connect


【解决方案1】:

两种模式都启动一个 REST API

分布式模式不接受连接器的属性文件,您必须发布它。没有理由单独执行此操作,因为您从命令行提供的连接器已经在运行

建议使用分布式模式,因为连接器的状态被存储回 Kafka 主题中,而不是在运行独立模式的单机上的文件中维护

更多详情请参考-Kafka Connect Concepts

kafka connect 如何理解又添加了 5 个 EC2 并且它必须共享工作负载?

我是否必须在所有 ec2 中运行并启动并创建 kafka 连接然后启动?我如何确认所有 5 个 EC2 都使用相同的连接器正常运行。

嗯,您的 EC2 机器不知道启动任何进程,除非它们是某个分布式集群的一部分,因此您必须在每个进程上启动分布式模式,使用相同的设置(Confluent 的 Ansible 存储库使这变得非常容易)。

您可以点击任何 Connect 服务器的 /status 端点来查看哪些地址正在运行哪些任务

NOT_ENOUGH_REPLICAS

因为您没有足够的代理来创建用于跟踪状态的内部 Kafka Connect 主题

【讨论】:

  • 这意味着我的分布式模式还没有开始。你能在我问题的最后部分提出一些建议吗..
  • 确保您至少拥有三个健康的 kafka 经纪人
  • 我每 3 个可用区有 2 个经纪人,所以总共有 6 个经纪人
  • 我也跑过然后 curl /usr/local/confluent/bin/connect-distributed /usr/local/confluent/etc/kafka/connect-distributed.properties /usr/local/confluent/etc/kafka-connect-elasticsearch/quickstart-elasticsearch.properties?或者只是卷曲
  • 1) connect-distributed 启动一个 Connect worker。 Worker 使用 REST API 启动自己的 HTTP 服务器。你不能 curl 没有运行任何 HTTP 服务器的东西 2) 搜索关于使用 YUM/APT 安装平台的 Confluent 文档,而不是提取 tar.gz 文件
猜你喜欢
  • 1970-01-01
  • 2019-02-03
  • 2019-05-12
  • 2018-08-13
  • 2019-11-30
  • 2017-06-17
  • 2020-01-02
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多