<!--
 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.
-->
﻿<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section
        name="kafkaClientConfiguration"
        type="Kafka.Client.Cfg.KafkaClientConfiguration, Kafka.Client"
        allowLocation="true"
        allowDefinition="Everywhere"
      />
  </configSections>
  <kafkaClientConfiguration>
    <kafkaServer address="192.168.1.39" port="9092"></kafkaServer>
    <consumer numberOfTries="2" groupId="testGroup" timeout="10000" autoOffsetReset="smallest" autoCommit="true" autoCommitIntervalMs="1000" fetchSize="307200" backOffIncrementMs="2000"/>
    <brokerPartitionInfos>
      <add id="0" address="192.168.1.39" port="9092" />
      <add id="1" address="192.168.1.39" port="9101" />
      <add id="2" address="192.168.1.39" port="9102" />
    </brokerPartitionInfos>
    <zooKeeperServers addressList="192.168.1.39:2181" sessionTimeout="30000" connectionTimeout="3000"></zooKeeperServers>
  </kafkaClientConfiguration>
</configuration>
