###
# #%L
# SAMOA
# %%
# Copyright (C) 2014 - 2015 Apache Software Foundation
# %%
# Licensed 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.
# #L%
###

# 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
