You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Kuradeon (Jira)" <ji...@apache.org> on 2024/08/07 07:43:00 UTC
[jira] [Comment Edited] (KAFKA-17263) Sometimes KafkaConsumer.close will block the thread
[ https://issues.apache.org/jira/browse/KAFKA-17263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17871280#comment-17871280 ]
Kuradeon edited comment on KAFKA-17263 at 8/7/24 7:42 AM:
----------------------------------------------------------
I added volatile flag for closed and enabled fields in heartbeat thread along with the heartbeat thread field in coordinator. After that, I check two VM, both of them hold lots of heartbeat threads of one client when the client enabled static membership. While only one heartbeat thread of the normal consumer clients. I guess it may be a bug in static membership feature.
{code:java}
// Some comments here
Thread 475 (kafka-coordinator-heartbeat-thread | XXX-st-c38):
State: WAITING
Blocked count: 0
Waited count: 1
Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@49984a3f
Stack:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1323)
Thread 471 (kafka-coordinator-heartbeat-thread | XXX-st-c38):
State: WAITING
Blocked count: 2
Waited count: 5
Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@49984a3f
Stack:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1323)
Thread 470 (kafka-coordinator-heartbeat-thread | XXX-st-c38):
State: WAITING
Blocked count: 2
Waited count: 5
Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@49984a3f
Stack:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1323)
Thread 469 (kafka-coordinator-heartbeat-thread | XXX-st-c38):
State: WAITING
Blocked count: 3
Waited count: 6
Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@49984a3f
Stack:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1323)
Thread 468 (kafka-coordinator-heartbeat-thread | XXX-st-c38):
State: WAITING
Blocked count: 3
Waited count: 37
Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@49984a3f
Stack:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1323)
{code}
was (Author: JIRAUSER305948):
I added volatile flag for closed and enabled fields in heartbeat thread along with the heartbeat thread field in coordinator. After that, I check two VM, both of them hold lots of heartbeat threads of one client when the client enabled static membership. While only one heartbeat thread of the normal consumer clients. I guess it may be a bug in static membership feature.
> Sometimes KafkaConsumer.close will block the thread
> ---------------------------------------------------
>
> Key: KAFKA-17263
> URL: https://issues.apache.org/jira/browse/KAFKA-17263
> Project: Kafka
> Issue Type: Bug
> Components: clients, consumer
> Affects Versions: 2.8.2
> Environment: Java 8
> Reporter: Kuradeon
> Priority: Major
> Attachments: screenshot-1.png, screenshot-2.png, screenshot-3.png, screenshot-4.png, screenshot-5.png
>
>
> Sometimes, the thread will be blocked and never continue (state: waiting) after invoke KafkaConsumer.close(). Here are the related thread dump:
> {code:java}
> Thread 73 (pool-5-thread-1):
> State: WAITING
> Blocked count: 25
> Waited count: 22
> Waiting on org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread@565a2927
> Stack:
> java.lang.Object.wait(Native Method)
> java.lang.Thread.join(Thread.java:1257)
> java.lang.Thread.join(Thread.java:1331)
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator.closeHeartbeatThread(AbstractCoordinator.java:385)
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator.close(AbstractCoordinator.java:1010)
> org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.close(ConsumerCoordinator.java:926)
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2366)
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2333)
> org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:2283)
> Thread 687 (kafka-coordinator-heartbeat-thread | XXXX-st-c35):
> State: WAITING
> Blocked count: 0
> Waited count: 1
> Waiting on org.apache.kafka.clients.consumer.internals.ConsumerCoordinator@51f1e632
> Stack:
> java.lang.Object.wait(Native Method)
> java.lang.Object.wait(Object.java:502)
> org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:1360)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)