Chris Egerton created KAFKA-17252:
-------------------------------------
Summary: Forwarded source task zombie fencings may fail when
leader has just started
Key: KAFKA-17252
URL: https://issues.apache.org/jira/browse/KAFKA-17252
Project: Kafka
Issue Type: Bug
Components: connect
Reporter: Chris Egerton
Assignee: Chris Egerton
We've observed some flaky integration test failures such as [this
one|https://ge.apache.org/s/52il7msnknzp2/tests/task/:connect:mirror:test/details/org.apache.kafka.connect.mirror.integration.DedicatedMirrorIntegrationTest/testMultiNodeCluster()?top-execution=1]
where a source task fails to start with exactly-once support enabled with this
stack trace:
{code:java}
org.apache.kafka.connect.runtime.rest.errors.ConnectRestException: This worker
is still starting up and has not been able to read a session key from the
config topic yet
at
org.apache.kafka.connect.runtime.rest.RestClient.httpRequest(RestClient.java:186)
at
org.apache.kafka.connect.runtime.rest.RestClient.httpRequest(RestClient.java:140)
at
org.apache.kafka.connect.runtime.rest.RestClient.httpRequest(RestClient.java:101)
at
org.apache.kafka.connect.runtime.distributed.DistributedHerder.lambda$fenceZombieSourceTasks$23(DistributedHerder.java:1329)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583) {code}
This occurs because the leader has not yet read (or believes it has not yet
read) a session key from the config topic.
However, in a cluster where all nodes have always used the sessioned rebalance
protocol, this scenario should be impossible: there must be a session key
present in the topic in order for a leader to handle external requests (such as
creating connectors), and all workers must read to the end of all internal
topics before joining the cluster.
The cause of this failure is that, during startup, session keys read from the
config topic are ignored. The herder does [check its config state snapshot for
a session
key|https://github.com/apache/kafka/blob/da14b5a61dc90fc70748278c98ce312a7a433c0d/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/distributed/DistributedHerder.java#L463]
in its tick thread loop, which should help, but it's possible that a worker
joins the cluster, becomes the leader, and receives a request from a follower
to fence a zombie source task before this check occurs, which will then cause
the leader to response with a 503 error, failing the task.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)