往topic发一个消息,如果需要处理n个业务,就可以写到n个消费者组,如果是单独的业务模块不需要关心也不影响老业务,这种方式对于都写到一个消费者里,有利于代码解耦和模块扩展。
1、pom依赖
org.springframework
spring-webmvc
4.2.3.RELEASE
org.springframework.kafka
spring-kafka
1.3.1.RELEASE
2、生产者
/**
* kafka produce 单例模式只初始化一个生产者
*/
public class KafkaProducer {
private static KafkaTemplate kafkaTemplate = new KafkaTemplate<>(producerFactory());;
public static void send(String topic, String key, String data){
ListenableFuture> future = kafkaTemplate.send(topic, key, data);
future.addCallback(new CallBackSuccess(),new FailCallBack(topic, key, data));
}
public static void send(String topic, String data){
ListenableFuture> future = kafkaTemplate.send(topic, data);
future.addCallback(new CallBackSuccess(),new FailCallBack(topic,"",data));
}
private static void send(String topic, Integer parti, Long time, Object key, String value){
kafkaTemplate.send(topic,parti,time,key,value);
}
/**
*
* Description:获取配置
* Date: 2017年7月11日
* @author shaqf
*/
private static Map producerConfigs() {
Map props = Maps.newHashMap();
String list = Properties.appProps.getValue("kafka.broker");
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, list);
props.put(ProducerConfig.RETRIES_CONFIG, 0);
props.put(ProducerConfig.BATCH_SIZE_CONFIG, 4096);
props.put(ProducerConfig.LINGER_MS_CONFIG, 1);
props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 40960);
props.put(ProducerConfig.KEY_SERIALIZER