in metadata/src/main/java/org/apache/kafka/image/MetadataDelta.java [184:263]
public void replay(ApiMessage record) {
MetadataRecordType type = MetadataRecordType.fromId(record.apiKey());
switch (type) {
case REGISTER_BROKER_RECORD:
replay((RegisterBrokerRecord) record);
break;
case UNREGISTER_BROKER_RECORD:
replay((UnregisterBrokerRecord) record);
break;
case TOPIC_RECORD:
replay((TopicRecord) record);
break;
case PARTITION_RECORD:
replay((PartitionRecord) record);
break;
case CONFIG_RECORD:
replay((ConfigRecord) record);
break;
case PARTITION_CHANGE_RECORD:
replay((PartitionChangeRecord) record);
break;
case FENCE_BROKER_RECORD:
replay((FenceBrokerRecord) record);
break;
case UNFENCE_BROKER_RECORD:
replay((UnfenceBrokerRecord) record);
break;
case REMOVE_TOPIC_RECORD:
replay((RemoveTopicRecord) record);
break;
case DELEGATION_TOKEN_RECORD:
replay((DelegationTokenRecord) record);
break;
case USER_SCRAM_CREDENTIAL_RECORD:
replay((UserScramCredentialRecord) record);
break;
case FEATURE_LEVEL_RECORD:
replay((FeatureLevelRecord) record);
break;
case CLIENT_QUOTA_RECORD:
replay((ClientQuotaRecord) record);
break;
case PRODUCER_IDS_RECORD:
replay((ProducerIdsRecord) record);
break;
case BROKER_REGISTRATION_CHANGE_RECORD:
replay((BrokerRegistrationChangeRecord) record);
break;
case ACCESS_CONTROL_ENTRY_RECORD:
replay((AccessControlEntryRecord) record);
break;
case CLEAR_ELR_RECORD:
replay((ClearElrRecord) record);
break;
case REMOVE_ACCESS_CONTROL_ENTRY_RECORD:
replay((RemoveAccessControlEntryRecord) record);
break;
case REMOVE_USER_SCRAM_CREDENTIAL_RECORD:
replay((RemoveUserScramCredentialRecord) record);
break;
case REMOVE_DELEGATION_TOKEN_RECORD:
replay((RemoveDelegationTokenRecord) record);
break;
case NO_OP_RECORD:
/* NoOpRecord is an empty record and doesn't need to be replayed beyond
* updating the highest offset and epoch.
*/
break;
case ZK_MIGRATION_STATE_RECORD:
// In 4.0, although migration is no longer supported and ZK has been removed from Kafka,
// users might migrate from ZK to KRaft in version 3.x and then perform a rolling upgrade to 4.0.
// Therefore, this case needs to be retained but will be a no-op.
break;
case REGISTER_CONTROLLER_RECORD:
replay((RegisterControllerRecord) record);
break;
default:
throw new RuntimeException("Unknown metadata record type " + type);
}
}