@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        PulsarTableSource that = (PulsarTableSource) o;
        return Objects.equals(deserializationSchemaFactory, that.deserializationSchemaFactory)
                && Objects.equals(
                        decodingFormatForReadingMetadata, that.decodingFormatForReadingMetadata)
                && Objects.equals(changelogMode, that.changelogMode)
                && Objects.equals(topics, that.topics)
                && Objects.equals(properties, that.properties)
                && Objects.equals(startCursor, that.startCursor)
                && Objects.equals(stopCursor, that.stopCursor)
                && subscriptionType == that.subscriptionType
                && Objects.equals(enableLogReport, that.enableLogReport);
    }
According to convention, the order of the final row must be PHYSICAL + FORMAT METADATA +
CONNECTOR METADATA where the format metadata has the highest precedence.

@return
inlong-sort/sort-flink/sort-flink-v1.15/sort-connectors/pulsar/src/main/java/org/apache/inlong/sort/pulsar/table/PulsarTableSource.java