{#
# 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={{ra_indexing_workers}}
indexing.acker.executors={{ra_indexing_acker_executors}}
topology.worker.childopts={{indexing_topology_worker_childopts}}
topology.auto-credentials={{topology_auto_credentials}}
topology.max.spout.pending={{ra_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={{ra_indexing_kafka_start}}

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

##### Indexing #####
indexing.writer.class.name=org.apache.metron.solr.writer.SolrWriter

##### Parallelism #####
kafka.spout.parallelism={{ra_indexing_kafka_spout_parallelism}}
indexing.writer.parallelism={{ra_indexing_writer_parallelism}}
