package org.rakam.kafka.collection;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
import com.google.common.net.HostAndPort;
import io.airlift.configuration.Config;
import io.airlift.units.DataSize;
import io.airlift.units.Duration;
import io.airlift.units.MinDuration;
import java.util.Set;
import static com.google.common.collect.Iterables.transform;
public class KafkaConfig
{
private static final int KAFKA_DEFAULT_PORT = 9092;
public static final String SERIALIZER = "kafka.serializer.DefaultEncoder";
private Set<HostAndPort> nodes = ImmutableSet.of();
private Duration kafkaConnectTimeout = Duration.valueOf("10s");
private DataSize kafkaBufferSize = new DataSize(64, DataSize.Unit.KILOBYTE);
private Duration commitInterval = Duration.valueOf("5s");
private HostAndPort zookeeperNode;
// @Size(min = 1)
public Set<HostAndPort> getNodes()
{
return nodes;
}
@Config("nodes")
public KafkaConfig setNodes(String nodes)
{
this.nodes = (nodes == null) ? null : parseNodes(nodes);
return this;
}
@Config("zookeeper.connect")
public KafkaConfig setZookeeperNode(String node)
{
this.zookeeperNode = (node == null) ? null : HostAndPort.fromString(node);
return this;
}
@MinDuration("1s")
public Duration getKafkaConnectTimeout()
{
return kafkaConnectTimeout;
}
@Config("connect-timeout")
public KafkaConfig setKafkaConnectTimeout(String kafkaConnectTimeout)
{
this.kafkaConnectTimeout = Duration.valueOf(kafkaConnectTimeout);
return this;
}
public DataSize getKafkaBufferSize()
{
return kafkaBufferSize;
}
@Config("buffer-size")
public KafkaConfig setKafkaBufferSize(String kafkaBufferSize)
{
this.kafkaBufferSize = DataSize.valueOf(kafkaBufferSize);
return this;
}
@MinDuration("1s")
public Duration getCommitInterval()
{
return commitInterval;
}
@Config("commit-interval")
public KafkaConfig setCommitInterval(String interval)
{
if(interval != null)
this.commitInterval = Duration.valueOf(interval);
return this;
}
public HostAndPort getZookeeperNode() {
return zookeeperNode;
}
public static ImmutableSet<HostAndPort> parseNodes(String nodes)
{
Splitter splitter = Splitter.on(',').omitEmptyStrings().trimResults();
return ImmutableSet.copyOf(transform(splitter.split(nodes), KafkaConfig::toHostAddress));
}
private static HostAndPort toHostAddress(String value)
{
return HostAndPort.fromString(value).withDefaultPort(KAFKA_DEFAULT_PORT);
}
}