private Message deserializeMessage(Descriptors.Descriptor descriptor, byte[] messageBytes) throws IOException {
        if (descriptor == null) {
            throw new SerializationException("No Protobuf Descriptor found");
        }
        return DynamicMessage.parseFrom(descriptor, new ByteArrayInputStream(messageBytes));
    }
Deserialize protobuf message from the given byte array.
The implementation follows the open-closed principle by breaking down the
deserialization process into multiple phases that can be extended by subclasses.

@param topic   The Kafka topic
@param headers The Kafka record headers
@param payload The serialized protobuf payload
@return The deserialized object
core/src/main/java/kafka/automq/table/deserializer/proto/AbstractCustomKafkaProtobufDeserializer.java