public List<String> getStoreBackupFactories(String storeName) {
    List<String> storeBackupManagers;
    if (containsKey(String.format(STORE_BACKUP_FACTORIES, storeName))) {
      storeBackupManagers = getList(String.format(STORE_BACKUP_FACTORIES, storeName), new ArrayList<>());
    } else {
      storeBackupManagers = getJobStoreBackupFactories();
      // For backwards compatibility if the changelog is enabled, we use default kafka backup factory
      if (storeBackupManagers.isEmpty() && getChangelogStream(storeName).isPresent()) {
        storeBackupManagers = DEFAULT_BACKUP_FACTORIES;
      }
    }
    return storeBackupManagers;
  }
Backup state backend factory follows the precedence:

1. If stores.store-name.backup.factories config key exists the store-name, that value is used
2. If stores.backup.factories is set for the job, that value is used
3. If stores.store-name.changelog is set for store-name, the default Kafka changelog state backend factory
4. Otherwise no backup factories will be configured for the store

Note: that 2 takes precedence over 3 enables job based migration off of Changelog restores
@return List of backup factories for the store in order of backup precedence
samza-core/src/main/java/org/apache/samza/config/StorageConfig.java