# 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.producer.ProducerConfig for more details

############################# Producer Basics #############################

# need to set either broker.list or zk.connect

# configure brokers statically
# format: brokerid1:host1:port1,brokerid2:host2:port2 ...
broker.list=0:localhost:9092

# discover brokers from ZK
#zk.connect=

# zookeeper session timeout; default is 6000
#zk.sessiontimeout.ms=

# the max time that the client waits to establish a connection to zookeeper; default is 6000
#zk.connectiontimeout.ms

# name of the partitioner class for partitioning events; default partition spreads data randomly
#partitioner.class=

# specifies whether the messages are sent asynchronously (async) or synchronously (sync)
producer.type=sync

# specify the compression codec for all data generated: 0: no compression, 1: gzip
compression.codec=0

# message encoder
serializer.class=kafka.serializer.StringEncoder

# allow topic level compression
#compressed.topics=

# max message size; messages larger than that size are discarded; default is 1000000
#max.message.size=


############################# Async Producer #############################
# maximum time, in milliseconds, for buffering data on the producer queue 
#queue.time=

# the maximum size of the blocking queue for buffering on the producer 
#queue.size=

# Timeout for event enqueue:
# 0: events will be enqueued immediately or dropped if the queue is full
# -ve: enqueue will block indefinitely if the queue is full
# +ve: enqueue will block up to this many milliseconds if the queue is full
#queue.enqueueTimeout.ms=

# the number of messages batched at the producer 
#batch.size=

# the callback handler for one or multiple events 
#callback.handler=

# properties required to initialize the callback handler 
#callback.handler.props=

# the handler for events 
#event.handler=

# properties required to initialize the event handler 
#event.handler.props=

