# 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.
# see kafka.server.KafkaConfig for additional details and defaults

# the id of the broker
brokerid=1

# hostname of broker. If not set, will pick up from the value returned
# from getLocalHost.  If there are multiple interfaces getLocalHost
# may not be what you want.
# hostname=

# number of logical partitions on this broker
num.partitions=1

# the port the socket server runs on
port=9092

# the number of processor threads the socket server uses. Defaults to the number of cores on the machine
num.threads=8

# the directory in which to store log files
log.dir=/tmp/kafka-source-2-1-logs

# the send buffer used by the socket server 
socket.send.buffer=1048576

# the receive buffer used by the socket server
socket.receive.buffer=1048576

# the maximum size of a log segment
log.file.size=536870912

# the interval between running cleanup on the logs
log.cleanup.interval.mins=1

# the minimum age of a log file to eligible for deletion
log.retention.hours=168

#the number of messages to accept without flushing the log to disk
log.flush.interval=600

#set the following properties to use zookeeper

# enable connecting to zookeeper
enable.zookeeper=true

# zk connection string
# comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"
zk.connect=localhost:2182

# timeout in ms for connecting to zookeeper
zk.connectiontimeout.ms=1000000

# time based topic flush intervals in ms
#topic.flush.intervals.ms=topic:1000

# default time based flush interval in ms
log.default.flush.interval.ms=1000

# time based topic flasher time rate in ms
log.default.flush.scheduler.interval.ms=1000

