You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Colt McNealy (Jira)" <ji...@apache.org> on 2026/07/01 22:05:00 UTC
[jira] [Commented] (KAFKA-19853) Transaction Failure when StreamThread blocks on StateUpdater during onAssignment()
[ https://issues.apache.org/jira/browse/KAFKA-19853?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18093073#comment-18093073 ]
Colt McNealy commented on KAFKA-19853:
--------------------------------------
[~lucasbru] yes, we can continue to reproduce this occasionally with the following sequence of events.
# Build a cluster with 200GB state per instance, 3 instances (600GB total), 1 standby replica, 4 CPU's, 3 stream threads
# Kill one instance completely.
# The cluster has no offline tasks since standby's recover, but both remaining instances are now full-speed-ahead restoring the missing standby's.
# Trigger a rebalance among the last standing servers, normally by restarting one of them.
We can reduce the likelihood of the stall issue observed above happening by:
# Increasing the available CPU's
# Increasing disk bandwidth
# Reducing the number of stream threads (so there are fewer state updaters thrashing the rocksdb compaction threadpool and disk bandwidth)
I believe this bug is still valid; also, our RocksDB configurations aren't that crazy from normal. We mostly follow the Confluent guide for limiting memory, and set it to use about 60% of container memory. 25% is used by the JVM heap, and the remaining 15% is buffer overhead.
> Transaction Failure when StreamThread blocks on StateUpdater during onAssignment()
> ----------------------------------------------------------------------------------
>
> Key: KAFKA-19853
> URL: https://issues.apache.org/jira/browse/KAFKA-19853
> Project: Kafka
> Issue Type: Bug
> Components: streams
> Affects Versions: 3.9.0
> Reporter: Colt McNealy
> Assignee: Colt McNealy
> Priority: Major
> Attachments: image (3).png, image (4).png, image (5).png
>
>
> We've observed that the `StreamThread` blocks waiting for a `Future` from the `StateUpdater` in the `StreamsPartitionAssigner#onAssignment()` method when we are moving a task out of the `StateUpdater` and onto the `StreamThread`.
>
> This can cause problems because, during restoration or with warmup replicas, the `StateUpdater#runOnce()` method can take a long time (upwards of 20 seconds) when RocksDB stalls writes to allow compaction to keep up. In EOS this blockage may cause the transaction to time out, which is a big mess. This is because the `StreamThread` may have an open transaction before the `StreamsPartitionAssignor#onAssignment()` method is called.
>
> Some screenshots from the JFR below (credit to [~eduwerc]).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)