All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.panhongan.util.kafka.MessageKafkaWriter Maven / Gradle / Ivy

package com.github.panhongan.util.kafka;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.github.panhongan.util.control.Lifecycleable;

import kafka.javaapi.producer.Producer;


public class MessageKafkaWriter extends AbstractMessageProcessor implements Lifecycleable {
	
	private static final Logger logger = LoggerFactory.getLogger(MessageKafkaWriter.class);
	
	private String zk_list = null;
	
	private String broker_list = null;
	
	private Producer producer = null;
	
	/**
	 * @param zk_list
	 * @param broker_list
	 */
	
	public MessageKafkaWriter(String zk_list, String broker_list) {
		this.zk_list = zk_list;
		this.broker_list = broker_list;
	}
	
	@Override
	public boolean init() {
		producer = KafkaUtil.createProducer(zk_list, broker_list, false);
		return (producer != null);
	}
	
	@Override
	public void uninit() {
		KafkaUtil.closeProducer(producer);
	}

	@Override
	public Object processMessage(String topic, int partition_id, String message){
		int ret = KafkaUtil.sendData(producer, topic, message);
		if (ret == 1) {
			logger.warn("send message to kafka failed : {}", message);
			KafkaUtil.closeProducer(producer);
			
			producer = KafkaUtil.createProducer(zk_list, broker_list, false);
			ret = KafkaUtil.sendData(producer, topic, message);
		}

		return (ret == 0);
	}
	
	@Override
	public Object processMessage(String topic, int partition_id, List msg_list) {
		int ret = KafkaUtil.sendBatch(producer, topic, msg_list);
		if (ret == 1) {
			logger.warn("send message to kafka failed");
			KafkaUtil.closeProducer(producer);
			
			producer = KafkaUtil.createProducer(zk_list, broker_list, true);
			ret = KafkaUtil.sendBatch(producer, topic, msg_list);
		}
		
		return (ret == 0);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy