卡夫卡连接 |由于操作冲突,无法完成请求
Posted
技术标签:
【中文标题】卡夫卡连接 |由于操作冲突,无法完成请求【英文标题】:Kafka Connect | Cannot complete request because of a conflicting operation 【发布时间】:2019-06-16 22:38:43 【问题描述】:1) 我们有 3 个节点 kafka 和 kafka 连接集群
2) 我们仅在分布式模式下在 kafka 节点上运行 kafka-connect
3) 当我尝试使用以下配置创建连接器时:
"name": "connector-state-0",
"config":
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.user": "user",
"database.server.id": "5023",
"database.hostname": "hostname",
"database.password": "password",
"database.history.kafka.bootstrap.servers": "ip:9092",
"database.history.kafka.topic": "topicname",
"database.server.name": "prod",
"database.port": "3306",
"snapshot.mode": "when_needed",
"include.schema.changes": "false",
"table.whitelist": "country.state"
关于创建连接器的请求,它在 3 个节点中的 2 个节点上给了我以下错误:
"error_code":409,"message":"Cannot complete request because of a conflicting operation (e.g. worker rebalance)"
在其中一个节点上:我能够创建一个连接器,但任务没有开始,我可以在日志中看到以下错误:
[2019-01-23 10:50:06,455] INFO 127.0.0.1 - - [23/Jan/2019:10:50:06 +0000] "POST /connectors/birdeye-connector-state-0/tasks?forward=true HTTP/1.1" 409 113 8 (org.apache.kafka.connect.runtime.rest.RestServer:60)
[2019-01-23 10:50:06,462] INFO 127.0.0.1 - - [23/Jan/2019:10:50:06 +0000] "POST /connectors/birdeye-connector-state-0/tasks HTTP/1.1" 409 113 21 (org.apache.kafka.connect.runtime.rest.RestServer:60)
[2019-01-23 10:50:06,466] ERROR Request to leader to reconfigure connector tasks failed (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1020)
org.apache.kafka.connect.runtime.rest.errors.ConnectRestException: Cannot complete request because of a conflicting operation (e.g. worker rebalance)
at org.apache.kafka.connect.runtime.rest.RestClient.httpRequest(RestClient.java:97)
at org.apache.kafka.connect.runtime.distributed.DistributedHerder$18.run(DistributedHerder.java:1017)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
我无法找出导致问题的原因。
【问题讨论】:
请注意,不建议在与 Kafka 代理相同的节点上运行 Kafka Connect。 当您在一个节点上成功运行它并在日志中看到该错误时,是否同时发生了其他任何事情?例如任务再平衡? @RobinMoffatt:不……可能的原因是什么? @RobinMoffatt:我可以在出现错误的节点上非常频繁地看到以下日志:在节点 prod-paid-kafka-node 的偏移量 233 处添加了对分区 connect-configs-0 的 READ_UNCOMMITTED 获取请求-api-1.birdeye.com:9092 (id: 0 rack: null) (org.apache.kafka.clients.consumer.internals.Fetcher:843) 你能检查它是否真的在启动你的连接器(不管错误信息如何)?尝试从领导工作人员创建连接器。还要确保你的worker.config中的“rest.advertised.port”中描述的端口没有被所有节点上的任何其他进程使用。 【参考方案1】:您需要将rest.advertised.host.name
设置为其他 Kafka Connect 工作人员可以解析和连接到的主机或 IP。这是因为它用于工作人员之间的内部通信。
如果您的 REST 请求遇到一个 不是集群当前领导者的工作人员,该工作人员将尝试将请求转发给领导者。它使用rest.advertised.host.name
执行此操作。但是如果rest.advertised.host.name
是localhost
,那么worker 将只是将请求转发到它自己,因此事情将无法正常工作。在您的三名工人中,一名将成为领导者,这就是为什么您发现三分之二的失败。
更多详情见https://rmoff.net/2019/11/22/common-mistakes-made-when-configuring-multiple-kafka-connect-workers/
【讨论】:
以上是关于卡夫卡连接 |由于操作冲突,无法完成请求的主要内容,如果未能解决你的问题,请参考以下文章
卡夫卡连接错误:java.lang.NoClassDefFoundError:org/apache/http/conn/HttpClientConnectionManager