/**
* Copyright 2016 LinkedIn Corp. 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.
*/
package com.linkedin.kmf.services.configs;
import com.linkedin.kmf.partitioner.NewKMPartitioner;
import com.linkedin.kmf.producer.NewProducer;
import java.util.Map;
import org.apache.kafka.common.config.AbstractConfig;
import org.apache.kafka.common.config.ConfigDef;
import static org.apache.kafka.common.config.ConfigDef.Range.atLeast;
public class ProduceServiceConfig extends AbstractConfig {
private static final ConfigDef CONFIG;
public static final String ZOOKEEPER_CONNECT_CONFIG = CommonServiceConfig.ZOOKEEPER_CONNECT_CONFIG;
public static final String ZOOKEEPER_CONNECT_DOC = CommonServiceConfig.ZOOKEEPER_CONNECT_DOC;
public static final String BOOTSTRAP_SERVERS_CONFIG = CommonServiceConfig.BOOTSTRAP_SERVERS_CONFIG;
public static final String BOOTSTRAP_SERVERS_DOC = CommonServiceConfig.BOOTSTRAP_SERVERS_DOC;
public static final String TOPIC_CONFIG = CommonServiceConfig.TOPIC_CONFIG;
public static final String TOPIC_DOC = CommonServiceConfig.TOPIC_DOC;
public static final String PRODUCER_CLASS_CONFIG = "produce.producer.class";
public static final String PRODUCER_CLASS_DOC = "Producer class that will be instantiated as producer in the produce service. "
+ "It can be NewProducer, or full class name of any class that implements the KMBaseProducer interface. ";
public static final String PARTITIONER_CLASS_CONFIG = "produce.partitioner.class";
public static final String PARTITIONER_CLASS_DOC = "KMPartitioner class that corresponds to the partitioner used in the target cluster.";
public static final String PRODUCE_SYNC_CONFIG = "produce.sync";
public static final String PRODUCE_SYNC_DOC = "If true, and if this is supported by the producer class, messages are sent synchronously";
public static final String PRODUCER_ID_CONFIG = "produce.producer.id";
public static final String PRODUCER_ID_DOC = "Client id that will be used in the record sent by produce service.";
public static final String PRODUCE_RECORD_DELAY_MS_CONFIG = "produce.record.delay.ms";
public static final String PRODUCE_RECORD_DELAY_MS_DOC = "The gap in ms between records sent to the same partition by produce service.";
public static final String PRODUCE_RECORD_SIZE_BYTE_CONFIG = "produce.record.size.byte";
public static final String PRODUCE_RECORD_SIZE_BYTE_DOC = "Size of record in bytes sent by produce service.";
public static final String PRODUCE_THREAD_NUM_CONFIG = "produce.thread.num";
public static final String PRODUCE_THREAD_NUM_DOC = "Number of threads that produce service uses to send records.";
public static final String PRODUCER_PROPS_CONFIG = "produce.producer.props";
public static final String PRODUCER_PROPS_DOC = "The properties used to config producer in produce service.";
static {
CONFIG = new ConfigDef().define(ZOOKEEPER_CONNECT_CONFIG,
ConfigDef.Type.STRING,
ConfigDef.Importance.HIGH,
ZOOKEEPER_CONNECT_DOC)
.define(BOOTSTRAP_SERVERS_CONFIG,
ConfigDef.Type.STRING,
ConfigDef.Importance.HIGH,
BOOTSTRAP_SERVERS_DOC)
.define(TOPIC_CONFIG,
ConfigDef.Type.STRING,
ConfigDef.Importance.HIGH,
TOPIC_DOC)
.define(PRODUCER_CLASS_CONFIG,
ConfigDef.Type.STRING,
NewProducer.class.getCanonicalName(),
ConfigDef.Importance.LOW,
PRODUCER_CLASS_DOC)
.define(PARTITIONER_CLASS_CONFIG,
ConfigDef.Type.CLASS,
NewKMPartitioner.class,
ConfigDef.Importance.HIGH,
PARTITIONER_CLASS_DOC)
.define(PRODUCE_SYNC_CONFIG,
ConfigDef.Type.BOOLEAN,
true,
ConfigDef.Importance.LOW,
PRODUCE_SYNC_DOC)
.define(PRODUCER_ID_CONFIG,
ConfigDef.Type.STRING,
"kmf-producer",
ConfigDef.Importance.LOW,
PRODUCER_ID_DOC)
.define(PRODUCE_RECORD_DELAY_MS_CONFIG,
ConfigDef.Type.INT,
100,
ConfigDef.Importance.LOW,
PRODUCE_RECORD_DELAY_MS_DOC)
.define(PRODUCE_RECORD_SIZE_BYTE_CONFIG,
ConfigDef.Type.INT,
100,
ConfigDef.Importance.LOW,
PRODUCE_RECORD_SIZE_BYTE_DOC)
.define(PRODUCE_THREAD_NUM_CONFIG,
ConfigDef.Type.INT,
5,
atLeast(1),
ConfigDef.Importance.LOW,
PRODUCE_THREAD_NUM_DOC);
}
public ProduceServiceConfig(Map<?, ?> props) {
super(CONFIG, props);
}
}