You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Daniel Urban (Jira)" <ji...@apache.org> on 2021/08/30 15:56:00 UTC
[jira] [Resolved] (KAFKA-13253) Kafka Connect losing task
(re)configuration when connector name has special characters
[ https://issues.apache.org/jira/browse/KAFKA-13253?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Urban resolved KAFKA-13253.
----------------------------------
Resolution: Duplicate
Same issue as KAFKA-9747 - that one already has a fix under review
> Kafka Connect losing task (re)configuration when connector name has special characters
> --------------------------------------------------------------------------------------
>
> Key: KAFKA-13253
> URL: https://issues.apache.org/jira/browse/KAFKA-13253
> Project: Kafka
> Issue Type: Bug
> Components: KafkaConnect
> Affects Versions: 2.7.1
> Reporter: David Dufour
> Priority: Major
>
> When not leader, DistributedHerder.reconfigureConnector() forwards the task configuration to the leader as follow:
> {quote}String reconfigUrl = RestServer.urlJoin(leaderUrl, "/connectors/" + connName + "/tasks");
> log.trace("Forwarding task configurations for connector {} to leader", connName);
> RestClient.httpRequest(reconfigUrl, "POST", null, rawTaskProps, null, config, sessionKey, requestSignatureAlgorithm);
> {quote}
> The problem is that if the connector name contains some special characters, such as '<', '>'... they need to be 'URLEncoded' appropriately, otherwise an uncatched exception is raised in RestClient and the forward is lost.
> Here is the kind of exception we can catch by adding the necessary code in RestClient:
> {quote}java.lang.IllegalArgumentException: Illegal character in path at index 51: [http://10.224.0.15:8083/connectors/mirror1-cluster-]>mirror2-cluster.MirrorHeartbeatConnector/tasks
> {quote}
> An additional catch() should be added in RestClient.httpRequest(), here:
> {quote}{{catch (IOException | InterruptedException | TimeoutException | ExecutionException e) {}}
> log.error("IO error forwarding REST request: ", e);
> {{throw new ConnectRestException(Response.Status.INTERNAL_SERVER_ERROR, "IO Error trying to forward REST request: " + e.getMessage(), e);}}
> {{} finally {}}
> {quote}
> to catch all other exceptions because without, this kind of problem is completly silent.
> To reproduce:
> * start 2 kafka clusters
> * start a kafka connect (distributed) with at least 2 nodes
> * start an HeartbeatConnector with name "cluster1->cluster2"
> If the node which generated the task is not the leader (not systematic), it will forward the creation to the leader and it will be lost. As a result, the connector will stay in RUNNING state but without any task.
> Problem not easy to reproduce, it is important to start with empty connect topics to reproduce more easily
--
This message was sent by Atlassian Jira
(v8.3.4#803005)