@Override
  public Set<ConfigOption<?>> optionalOptions() {
    final Set<ConfigOption<?>> options = new HashSet<>();
    options.add(TOPIC);
    options.add(PROPS_BOOTSTRAP_SERVERS);
    options.add(PROPS_GROUP_ID);
    options.add(SCAN_STARTUP_MODE);
    options.add(SCAN_STARTUP_TIMESTAMP_MILLIS);
    options.add(SINK_PARTITIONER);
    options.add(MixedFormatValidator.MIXED_FORMAT_CATALOG);
    options.add(MixedFormatValidator.MIXED_FORMAT_TABLE);
    options.add(MixedFormatValidator.MIXED_FORMAT_DATABASE);
    options.add(MixedFormatValidator.DIM_TABLE_ENABLE);
    options.add(CatalogFactoryOptions.METASTORE_URL);

    // lookup
    options.add(MixedFormatValidator.LOOKUP_CACHE_MAX_ROWS);
    options.add(MixedFormatValidator.LOOKUP_RELOADING_INTERVAL);
    options.add(MixedFormatValidator.LOOKUP_CACHE_TTL_AFTER_WRITE);

    options.add(MixedFormatValidator.ROCKSDB_AUTO_COMPACTIONS);
    options.add(MixedFormatValidator.ROCKSDB_WRITING_THREADS);
    options.add(MixedFormatValidator.ROCKSDB_BLOCK_CACHE_CAPACITY);
    options.add(MixedFormatValidator.ROCKSDB_BLOCK_CACHE_NUM_SHARD_BITS);
    return options;
  }
A factory generates {@link MixedFormatDynamicSource} and {@link MixedFormatDynamicSink}
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/table/MixedDynamicTableFactory.java