# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#}

##### Storm #####
indexing.workers={{batch_indexing_workers}}
indexing.acker.executors={{batch_indexing_acker_executors}}
topology.worker.childopts={{indexing_topology_worker_childopts}}
topology.auto-credentials={{topology_auto_credentials}}
topology.max.spout.pending={{batch_indexing_topology_max_spout_pending}}

##### Kafka #####
kafka.zk={{zookeeper_quorum}}
kafka.broker={{kafka_brokers}}
kafka.security.protocol={{kafka_security_protocol}}

# One of EARLIEST, LATEST, UNCOMMITTED_EARLIEST, UNCOMMITTED_LATEST
kafka.start={{batch_indexing_kafka_start}}

indexing.input.topic={{indexing_input_topic}}
indexing.error.topic={{indexing_error_topic}}

##### HDFS #####
bolt.hdfs.rotation.policy={{bolt_hdfs_rotation_policy}}
bolt.hdfs.rotation.policy.units={{bolt_hdfs_rotation_policy_units}}
bolt.hdfs.rotation.policy.count={{bolt_hdfs_rotation_policy_count}}
indexing.hdfs.output={{metron_apps_indexed_hdfs_dir}}

##### Parallelism #####
kafka.spout.parallelism={{batch_indexing_kafka_spout_parallelism}}
hdfs.writer.parallelism={{hdfs_writer_parallelism}}