package com.neverwinterdp.kafka.producer;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Properties;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.ByteArraySerializer;
/**
* @author Tuan Nguyen
* @email tuan08@gmail.com
*/
public class DefaultKafkaWriter extends AbstractKafkaWriter {
final static public Charset UTF8 = Charset.forName("UTF-8") ;
private Properties kafkaProperties;
private KafkaProducer<byte[], byte[]> producer;
public DefaultKafkaWriter(String name, String kafkaBrokerUrls) {
this(name, null, kafkaBrokerUrls);
}
public DefaultKafkaWriter(String name, Map<String, String> props, String kafkaBrokerUrls) {
super(name);
Properties kafkaProps = new Properties();
kafkaProps.put("bootstrap.servers", kafkaBrokerUrls);
kafkaProps.put("value.serializer", ByteArraySerializer.class.getName());
kafkaProps.put("key.serializer", ByteArraySerializer.class.getName());
this.kafkaProperties = kafkaProps;
if (props != null) {
kafkaProps.putAll(props);
}
this.kafkaProperties = kafkaProps;
reconnect();
}
public void reconnect() {
if (producer != null) producer.close();
producer = new KafkaProducer<byte[], byte[]>(kafkaProperties);
}
public void send(String topic, int partition, String key, String data, Callback callback, long timeout) throws Exception {
byte[] keyBytes = key.getBytes(UTF8);
byte[] messageBytes = data.getBytes(UTF8);
send(topic, partition, keyBytes, messageBytes, callback, timeout);
}
public void send(String topic, int partition, byte[] key, byte[] data, Callback callback, long timeout) throws Exception {
ProducerRecord<byte[], byte[]> record = null;
if(partition >= 0) record = new ProducerRecord<byte[], byte[]>(topic, partition, key, data);
else record = new ProducerRecord<byte[], byte[]>(topic, key, data);
producer.send(record, callback);
}
public void close() { producer.close(); }
}