diff --git a/build.gradle b/build.gradle
index 9c23d6f9d6ee4..d47e9233e39f5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1118,6 +1118,7 @@ project(':clients') {
testCompile libs.bcpkix
testCompile libs.junitJupiter
testCompile libs.mockitoCore
+ testCompile libs.hamcrest
testRuntime libs.slf4jlog4j
testRuntime libs.jacksonDatabind
diff --git a/checkstyle/suppressions.xml b/checkstyle/suppressions.xml
index ef02e05c516e6..a71c593f811b2 100644
--- a/checkstyle/suppressions.xml
+++ b/checkstyle/suppressions.xml
@@ -100,7 +100,10 @@
files="RequestResponseTest.java|FetcherTest.java|KafkaAdminClientTest.java"/>
+ files="MemoryRecordsTest|MetricsTest|RequestResponseTest|TestSslUtils|AclAuthorizerBenchmark|MockConsumer"/>
+
+
diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java b/clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java
index 4d0f62c3a1d15..d34bf55711bf0 100644
--- a/clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java
+++ b/clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerRecords.java
@@ -16,11 +16,13 @@
*/
package org.apache.kafka.clients.consumer;
+import org.apache.kafka.clients.consumer.internals.FetchedRecords;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.utils.AbstractIterator;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -32,14 +34,99 @@
* partition returned by a {@link Consumer#poll(java.time.Duration)} operation.
*/
public class ConsumerRecords implements Iterable> {
-
- @SuppressWarnings("unchecked")
- public static final ConsumerRecords