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)