apache-kafka - 卡夫卡心跳线程阻塞
问题描述
我们正在使用 spring kafka 版本(2.1.5.RELEASE)。
在分析线程转储时进行性能测试后,我们看到下面的堆栈跟踪表明 HeartbeatThread 被消费者线程之一阻塞
日志:
消费者线程转储
org.springframework.kafka.KafkaListenerEndpointContainer#4-0-C-1 - priority:5 - threadId:0x00007fca72cf4800 - nativeId:0x5d - nativeId (decimal):93 - state:RUNNABLE
stackTrace:
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x000000067e24e1c0> (a sun.nio.ch.Util$3)
- locked <0x000000067e24e1a8> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000067e4415b0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.kafka.common.network.Selector.select(Selector.java:674)
at org.apache.kafka.common.network.Selector.poll(Selector.java:396)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:460)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:258)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:230)
at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1164)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1111)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:699)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- <0x000000067e3716b0> (a java.util.concurrent.locks.ReentrantLock$FairSync)
心跳线程转储
kafka-coordinator-heartbeat-thread | ccm.device.migration.event
Stack Trace is:
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000067e3716b0> (a java.util.concurrent.locks.ReentrantLock$FairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:224)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:243)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.pollNoWakeup(ConsumerNetworkClient.java:297)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator$HeartbeatThread.run(AbstractCoordinator.java:948)
- locked <0x000000067e2e0440> (a org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)
Locked ownable synchronizers:
- None
上述观察到的行为的可能原因是什么?
解决方案
推荐阅读
- javascript - 如何在 Ubuntu 18.04 中使用 Xcode?
- python - 如何在 Python 中序列化用户定义的函数
- javascript - 使用jsPDF下载PDF后文本右对齐不起作用
- html - 如何在不使用滤镜的情况下使图像变暗?
- javascript - 如何在 React-Native 上分析网络?
- c++ - C ++:获取内存分配错误的SIGCONT错误
- validation - 验证集的指标很奇怪
- javascript - 欧拉计划 #32:为什么我的答案是错误的?
- html - 带有正则表达式的 html+input 类型文本不带下划线(_)和特殊字符
- python - matplotlib 中的重叠图