Files that are both large and changed often are where bugs tend to cluster and where refactoring pays off first. Each file in the current tree is placed by its size and by the number of commits that changed it; its hotspot score is changes × √lines. Files without counted lines, such as binary files, are left out.
Each dot is a file; a bigger dot is a higher score. The dashed lines mark the median file size and the median number of changes, so the large files that change often are in the top right. Both axes are logarithmic. Showing the 2,000 highest-scoring of 7,502 files.
The files ranked by hotspot score: the larger a file is and the more often it changes, the higher it ranks. Authors is how many people have changed the file, bots aside, as on the Code Ownership page: a hotspot only one person has changed is also a bus-factor risk.
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| build.gradle | 4,451 | 899 | 208 | 59,977.5 | |
| core/src/test/scala/unit/kafka/server/KafkaApisTest.scala | 15,094 | 467 | 102 | 57,374.5 | |
| core/src/main/scala/kafka/server/KafkaApis.scala | 4,404 | 798 | 138 | 52,957.4 | |
| group-coordinator/src/test/java/org/apache/kafka/coordinator/group/GroupMetadataManagerTest.java | 31,917 | 222 | 43 | 39,661.0 | |
| core/src/test/scala/unit/kafka/server/ReplicaManagerTest.scala | 6,279 | 392 | 100 | 31,062.1 | |
| core/src/main/scala/kafka/server/ReplicaManager.scala | 2,577 | 515 | 117 | 26,143.5 | |
| group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupMetadataManager.java | 10,188 | 256 | 38 | 25,839.5 | |
| clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java | 5,387 | 312 | 101 | 22,899.6 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/StreamThreadTest.java | 4,938 | 320 | 77 | 22,486.7 | |
| clients/src/test/java/org/apache/kafka/common/requests/RequestResponseTest.java | 4,219 | 318 | 86 | 20,655.3 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| build.gradle | 4,451 | 899 | 208 | 59,977.5 | |
| core/src/test/scala/unit/kafka/server/KafkaApisTest.scala | 15,094 | 467 | 102 | 57,374.5 | |
| core/src/main/scala/kafka/server/KafkaApis.scala | 4,404 | 798 | 138 | 52,957.4 | |
| group-coordinator/src/test/java/org/apache/kafka/coordinator/group/GroupMetadataManagerTest.java | 31,917 | 222 | 43 | 39,661.0 | |
| core/src/test/scala/unit/kafka/server/ReplicaManagerTest.scala | 6,279 | 392 | 100 | 31,062.1 | |
| core/src/main/scala/kafka/server/ReplicaManager.scala | 2,577 | 515 | 117 | 26,143.5 | |
| group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupMetadataManager.java | 10,188 | 256 | 38 | 25,839.5 | |
| clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java | 5,387 | 312 | 101 | 22,899.6 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/StreamThreadTest.java | 4,938 | 320 | 77 | 22,486.7 | |
| clients/src/test/java/org/apache/kafka/common/requests/RequestResponseTest.java | 4,219 | 318 | 86 | 20,655.3 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamThread.java | 2,280 | 427 | 84 | 20,389.0 | |
| core/src/test/scala/integration/kafka/api/AuthorizerIntegrationTest.scala | 4,339 | 277 | 75 | 18,246.3 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/KafkaConsumerTest.java | 4,540 | 264 | 87 | 17,788.2 | |
| core/src/test/scala/unit/kafka/utils/TestUtils.scala | 1,186 | 507 | 118 | 17,460.2 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/TaskManagerTest.java | 5,236 | 216 | 42 | 15,629.8 | |
| clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java | 2,027 | 344 | 128 | 15,487.6 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/internals/FetcherTest.java | 3,927 | 237 | 85 | 14,851.8 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/StreamTaskTest.java | 3,955 | 228 | 66 | 14,338.6 | |
| streams/src/main/java/org/apache/kafka/streams/StreamsConfig.java | 2,333 | 295 | 96 | 14,248.8 | |
| core/src/main/scala/kafka/cluster/Partition.scala | 1,856 | 319 | 96 | 13,742.9 | |
| streams/src/main/java/org/apache/kafka/streams/KafkaStreams.java | 2,363 | 272 | 75 | 13,222.1 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinatorTest.java | 4,394 | 189 | 62 | 12,528.3 | |
| core/src/test/scala/unit/kafka/server/KafkaConfigTest.scala | 2,175 | 263 | 106 | 12,265.5 | |
| clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java | 1,837 | 285 | 114 | 12,215.2 | |
| core/src/test/java/kafka/server/share/SharePartitionTest.java | 13,883 | 103 | 22 | 12,136.1 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/TaskManager.java | 2,242 | 254 | 41 | 12,026.8 | |
| clients/src/test/java/org/apache/kafka/clients/admin/KafkaAdminClientTest.java | 1,867 | 276 | 85 | 11,925.6 | |
| core/src/test/scala/unit/kafka/cluster/PartitionTest.scala | 4,073 | 183 | 53 | 11,679.1 | |
| core/src/main/scala/kafka/server/KafkaConfig.scala | 470 | 536 | 167 | 11,620.2 | |
| core/src/test/scala/integration/kafka/api/PlaintextAdminIntegrationTest.scala | 4,656 | 169 | 67 | 11,531.7 | |
| clients/src/test/java/org/apache/kafka/clients/producer/internals/SenderTest.java | 4,090 | 168 | 74 | 10,744.1 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamTask.java | 1,584 | 266 | 59 | 10,586.7 | |
| raft/src/main/java/org/apache/kafka/raft/KafkaRaftClient.java | 4,185 | 159 | 52 | 10,286.0 | |
| core/src/test/scala/unit/kafka/network/SocketServerTest.scala | 2,423 | 202 | 70 | 9,943.2 | |
| clients/src/test/java/org/apache/kafka/clients/producer/internals/TransactionManagerTest.java | 4,794 | 139 | 53 | 9,624.2 | |
| core/src/main/scala/kafka/network/SocketServer.scala | 1,695 | 216 | 83 | 8,892.8 | |
| clients/src/test/java/org/apache/kafka/clients/producer/KafkaProducerTest.java | 3,488 | 149 | 76 | 8,799.8 | |
| core/src/main/scala/kafka/server/BrokerServer.scala | 985 | 275 | 73 | 8,630.8 | |
| clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java | 1,763 | 200 | 56 | 8,397.6 | |
| checkstyle/import-control.xml | 683 | 315 | 109 | 8,232.3 | |
| streams/src/test/java/org/apache/kafka/streams/KafkaStreamsTest.java | 2,291 | 164 | 50 | 7,849.8 | |
| connect/runtime/src/main/java/org/apache/kafka/connect/runtime/distributed/DistributedHerder.java | 3,126 | 139 | 55 | 7,771.6 | |
| streams/test-utils/src/main/java/org/apache/kafka/streams/TopologyTestDriver.java | 2,103 | 162 | 44 | 7,429.1 | |
| metadata/src/main/java/org/apache/kafka/controller/QuorumController.java | 2,245 | 155 | 45 | 7,344.1 | |
| clients/src/main/java/org/apache/kafka/clients/consumer/internals/AbstractCoordinator.java | 1,691 | 178 | 57 | 7,319.7 | |
| tests/kafkatest/services/kafka/kafka.py | 2,134 | 157 | 69 | 7,252.7 | |
| group-coordinator/src/test/java/org/apache/kafka/coordinator/group/GroupCoordinatorServiceTest.java | 6,033 | 93 | 32 | 7,223.5 | |
| streams/src/test/java/org/apache/kafka/streams/StreamsConfigTest.java | 2,243 | 149 | 61 | 7,056.7 | |
| connect/runtime/src/test/java/org/apache/kafka/connect/runtime/distributed/DistributedHerderTest.java | 4,792 | 101 | 40 | 6,991.7 | |
| core/src/test/scala/integration/kafka/server/DynamicBrokerReconfigurationTest.scala | 1,686 | 170 | 58 | 6,980.4 | |
| core/src/main/java/kafka/server/share/SharePartition.java | 3,603 | 116 | 18 | 6,962.9 | |
| metadata/src/test/java/org/apache/kafka/controller/ReplicationControlManagerTest.java | 3,736 | 113 | 36 | 6,906.9 | |
| clients/src/main/java/org/apache/kafka/common/utils/Utils.java | 1,768 | 163 | 88 | 6,853.8 | |
| streams/src/main/java/org/apache/kafka/streams/kstream/internals/KStreamImpl.java | 1,423 | 180 | 47 | 6,790.1 | |
| clients/src/main/java/org/apache/kafka/clients/NetworkClient.java | 1,889 | 156 | 64 | 6,780.2 | |
| clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java | 2,557 | 134 | 35 | 6,775.9 | |
| checkstyle/suppressions.xml | 333 | 371 | 119 | 6,770.1 | |
| gradle/dependencies.gradle | 240 | 430 | 131 | 6,661.5 | |
| core/src/test/scala/unit/kafka/server/RequestQuotaTest.scala | 944 | 216 | 65 | 6,636.5 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumerTest.java | 2,868 | 122 | 28 | 6,533.6 | |
| group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupCoordinatorService.java | 2,735 | 123 | 32 | 6,432.6 | |
| streams/src/main/java/org/apache/kafka/streams/kstream/KStream.java | 1,676 | 156 | 49 | 6,386.5 | |
| streams/src/main/java/org/apache/kafka/streams/state/internals/RocksDBStore.java | 1,615 | 158 | 42 | 6,349.6 | |
| raft/src/test/java/org/apache/kafka/raft/KafkaRaftClientTest.java | 4,687 | 89 | 28 | 6,093.1 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/InternalTopologyBuilder.java | 2,362 | 125 | 47 | 6,075.1 | |
| metadata/src/main/java/org/apache/kafka/controller/ReplicationControlManager.java | 2,604 | 118 | 38 | 6,021.5 | |
| core/src/test/java/kafka/server/share/SharePartitionManagerTest.java | 3,412 | 102 | 21 | 5,958.1 | |
| streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java | 1,511 | 149 | 38 | 5,791.9 | |
| clients/src/main/java/org/apache/kafka/clients/producer/internals/Sender.java | 1,144 | 171 | 59 | 5,783.7 | |
| clients/src/main/java/org/apache/kafka/clients/producer/internals/TransactionManager.java | 2,066 | 126 | 38 | 5,727.1 | |
| connect/runtime/src/main/java/org/apache/kafka/connect/runtime/Worker.java | 2,512 | 114 | 48 | 5,713.7 | |
| connect/runtime/src/test/java/org/apache/kafka/connect/runtime/WorkerTest.java | 3,679 | 92 | 44 | 5,580.2 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamsPartitionAssignor.java | 1,703 | 133 | 31 | 5,488.6 | |
| metadata/src/test/java/org/apache/kafka/controller/QuorumControllerTest.java | 1,763 | 130 | 38 | 5,458.5 | |
| streams/src/test/java/org/apache/kafka/streams/kstream/internals/KStreamImplTest.java | 2,547 | 105 | 37 | 5,299.1 | |
| clients/src/main/java/org/apache/kafka/clients/producer/internals/RecordAccumulator.java | 1,500 | 135 | 59 | 5,228.5 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/StreamsPartitionAssignorTest.java | 2,830 | 97 | 32 | 5,160.2 | |
| streams/src/test/java/org/apache/kafka/streams/StreamsBuilderTest.java | 2,946 | 88 | 36 | 4,776.4 | |
| core/src/main/scala/kafka/server/AbstractFetcherThread.scala | 873 | 160 | 69 | 4,727.5 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/StoreChangelogReaderTest.java | 2,957 | 86 | 39 | 4,676.5 | |
| clients/src/test/java/org/apache/kafka/common/security/authenticator/SaslAuthenticatorTest.java | 2,789 | 87 | 34 | 4,594.6 | |
| core/src/main/scala/kafka/server/DynamicBrokerConfig.scala | 893 | 147 | 53 | 4,392.8 | |
| clients/src/main/java/org/apache/kafka/common/network/Selector.java | 1,481 | 113 | 51 | 4,348.7 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/RecordCollectorTest.java | 2,372 | 89 | 42 | 4,334.6 | |
| core/src/test/scala/unit/kafka/server/AbstractFetcherThreadTest.scala | 3,741 | 70 | 35 | 4,281.5 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/internals/AbstractCoordinatorTest.java | 1,835 | 99 | 44 | 4,240.9 | |
| clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java | 774 | 152 | 72 | 4,228.8 | |
| clients/src/test/java/org/apache/kafka/clients/NetworkClientTest.java | 1,820 | 99 | 45 | 4,223.5 | |
| clients/src/test/java/org/apache/kafka/clients/producer/internals/RecordAccumulatorTest.java | 2,022 | 93 | 48 | 4,181.9 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/ProcessorStateManager.java | 842 | 143 | 39 | 4,149.5 | |
| clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java | 888 | 139 | 73 | 4,142.1 | |
| streams/src/test/java/org/apache/kafka/streams/processor/internals/ProcessorStateManagerTest.java | 1,517 | 105 | 42 | 4,089.6 | |
| streams/src/main/java/org/apache/kafka/streams/processor/internals/StoreChangelogReader.java | 1,570 | 103 | 30 | 4,081.2 | |
| group-coordinator/src/test/java/org/apache/kafka/coordinator/group/OffsetMetadataManagerTest.java | 4,043 | 64 | 23 | 4,069.4 | |
| clients/src/main/java/org/apache/kafka/clients/admin/Admin.java | 2,219 | 86 | 57 | 4,051.1 | |
| streams/src/main/java/org/apache/kafka/streams/kstream/KTable.java | 2,473 | 80 | 29 | 3,978.3 | |
| clients/src/test/java/org/apache/kafka/clients/consumer/internals/ShareConsumeRequestManagerTest.java | 4,011 | 62 | 18 | 3,926.6 | |
| connect/runtime/src/test/java/org/apache/kafka/connect/runtime/WorkerSinkTaskTest.java | 2,042 | 86 | 47 | 3,886.2 | |
| core/src/test/scala/unit/kafka/coordinator/transaction/TransactionStateManagerTest.scala | 1,474 | 101 | 45 | 3,877.7 | |
| streams/src/test/java/org/apache/kafka/streams/state/internals/RocksDBStoreTest.java | 1,920 | 87 | 36 | 3,812.1 |
How Apache Kafka compares with other Apache projects →
How Apache Kafka ranks among Apache projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
Publishes the report to GitHub Pages on every push to main: turn on Pages for the gh-pages branch.
# .github/workflows/gitstats.yml
name: GitStats Report
on:
push:
branches: [main]
permissions:
contents: write
jobs:
gitstats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: shenxianpeng/gitstats-action@v1
with:
deploy-to-pages: true