#
# 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.
#

# SAMOA Storm properties file
# This file contains specific configurations for SAMOA deployment in the Storm platform
# Note that you still need to configure Storm client in your machine, 
# including setting up Storm configuration file (~/.storm/storm.yaml) with correct settings

# samoa.samza.mode corresponds to the execution mode of the Task in Storm 
# possible values:
#   1. yarn: the Task will be sent into nimbus. The nimbus is configured by Storm configuration file
#   2. local: the Task will be sent using local Storm cluster
samoa.samza.mode=yarn

# yarn.am.memory : memory (in MB) to be allocated for ApplicationMaster on YARN cluster
# yarn.container.memory : memory (in MB) to be allocated for each worker
# containers on YARN cluster
yarn.am.memory=1024
yarn.container.memory=1024

# max.pi.per.container : maximum number of processing item instances allocated
# to a worker container
# e.g.: if this valua is 2 and there is a ProcessingItem with parallelism of 5.
# The 5 instances of that ProcessingItem will be running on 3 containers (2, 2, and 1) 
max.pi.per.container=1

# zookeeper.host : host URL of zookeeper server
# zookeeper.port : the port on which zookeeper server listen to client request
zookeeper.host=localhost
zookeeper.port=2181

# kafka.broker.list : comma separated list of host:port of brokers in kafka cluster
kafka.broker.list=localhost:9092

# kryo.register.file : the file contain the list of 
# class-name:serializer-name
# that needs to be registered with kryo
kryo.register.file=samza-kryo

# kafka.replication.factor : replication factor for kafka streams
# or the number of brokers to handle a kafka stream
# a possitive integer value
kafka.replication.factor=1

# checkpoint.commit.ms : frequency to commit a checkpoint (in ms)
checkpoint.commit.ms=60000

# hdfs.samoa.dir : SAMOA home directory in HDFS
# execution JAR, serialization files will be stored here
#hdfs.samoa.dir=/.samoa
